Java 和 React 應用程式的端到端 (E2E) 測試:完整指南
端到端(E2E)測試透過模擬後端(Java)和前端(React)的真實使用者工作流程來確保您的應用程式作為一個整體運行。本指南涵蓋了實施 E2E 測試的工具、設定和步驟。
1.選出正確的工具
對於 Java-React 堆疊中的 E2E 測試,請使用可以與後端和前端互動的工具:
-
前端測試工具:
- Cypress:用於前端測試的現代 E2E 測試工具。
- 劇作家或木偶師:無頭瀏覽器自動化。
- Selenium:適用於前端和後端的瀏覽器自動化。
-
後端測試工具:
- REST Assured:在 Java 中測試 REST API。
- JUnit:後端邏輯的 Java 測試框架。
-
整合工具:
- TestContainers:用於使用 Docker 容器進行測試。
- MockServer:在測試期間模擬 API。
- Allure:用於報告測試結果。
2.設定環境
後端(Java):
-
確保 API 已測試:
- 使用 JUnit 進行單元和整合測試。
- 使用 REST Assured 進行 API 檢定。
範例(API 的 REST Assured 檢定):
import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; public class ApiTest { @Test public void testGetUser() { RestAssured.baseURI = "http://localhost:8080"; given() .when() .get("/users/1") .then() .statusCode(200) .body("name", equalTo("John Doe")); } }
-
模擬外部相依性:
- 使用 MockServer 或 WireMock 來模擬外部 API。
-
容器化後端:
- 使用 Docker 為後端測試建立一致的環境。
- 範例 Dockerfile:
FROM openjdk:11 COPY target/myapp.jar /app/myapp.jar ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
前端(反應):
- 安裝賽普拉斯:
npm install cypress --save-dev
-
建立 Cypress 測驗:
- 範例:測試登入功能:
describe('Login Page', () => { it('should log in successfully', () => { cy.visit('http://localhost:3000/login'); cy.get('input[name="username"]').type('admin'); cy.get('input[name="password"]').type('password123'); cy.get('button[type="submit"]').click(); cy.url().should('include', '/dashboard'); }); });
-
Cypress 中的類比 API:
- 使用 cy.intercept() 攔截後端 API 呼叫。
cy.intercept('POST', '/api/login', { statusCode: 200, body: { token: 'fake-token' } });
3.寫 E2E 測驗
場景 1:使用者登入工作流程
-
後端檢定:
- 確保 /login API 傳回有效的令牌。
- 範例:
given() .contentType("application/json") .body("{ \"username\": \"admin\", \"password\": \"password123\" }") .when() .post("/login") .then() .statusCode(200) .body("token", notNullValue());
-
前端測試:
- 在登入頁面模擬使用者輸入並驗證重定向。
場景 2:建立並顯示項目
-
後端測試:
- 驗證 /createItem API 儲存資料並且 /items API 擷取資料。
import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; public class ApiTest { @Test public void testGetUser() { RestAssured.baseURI = "http://localhost:8080"; given() .when() .get("/users/1") .then() .statusCode(200) .body("name", equalTo("John Doe")); } }
-
前端測試:
- 驗證 UI 顯示已建立的項目。
FROM openjdk:11 COPY target/myapp.jar /app/myapp.jar ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
4.將端到端測試與 CI/CD 整合
-
CI 中的後端檢定:
- 使用 JUnit 和測試資料庫:
npm install cypress --save-dev
-
CI 中的前端測試:
- 運行賽普拉斯測試:
describe('Login Page', () => { it('should log in successfully', () => { cy.visit('http://localhost:3000/login'); cy.get('input[name="username"]').type('admin'); cy.get('input[name="password"]').type('password123'); cy.get('button[type="submit"]').click(); cy.url().should('include', '/dashboard'); }); });
-
完全整合:
- 使用 Docker Compose 一起運行後端和前端:
cy.intercept('POST', '/api/login', { statusCode: 200, body: { token: 'fake-token' } });
CI 的 GitHub 操作:
given() .contentType("application/json") .body("{ \"username\": \"admin\", \"password\": \"password123\" }") .when() .post("/login") .then() .statusCode(200) .body("token", notNullValue());
5.報告
-
Allure for Java:
- 整合 Allure 以獲得詳細的測試報告:
@Test public void testCreateAndRetrieveItem() { String itemJson = "{ \"name\": \"Test Item\" }"; // Create Item given() .contentType("application/json") .body(itemJson) .post("/createItem") .then() .statusCode(201); // Retrieve Items given() .get("/items") .then() .statusCode(200) .body("[0].name", equalTo("Test Item")); }
-
賽普拉斯儀表板:
- 使用 Cypress 儀表板追蹤測試運行:
describe('Item Management', () => { it('should display the newly created item', () => { cy.visit('http://localhost:3000/items'); cy.get('button#create-item').click(); cy.get('input[name="itemName"]').type('Test Item'); cy.get('button#save-item').click(); cy.contains('Test Item').should('exist'); }); });
6.最佳實務
- 在測試期間模擬外部 API 以避免不穩定。
- 使用專用的測試資料庫進行後端測試。
- 在 CI 中並行測試以節省時間。
- 每次運行後清理測試資料。
本指南為 Java 和 React 應用程式建立了一個強大的 E2E 測試框架。如果您需要幫助實現任何特定部分,請告訴我!
以上是Java React 應用程式的端對端測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具