端到端(E2E)測試透過模擬後端(Java)和前端(React)的真實使用者工作流程來確保您的應用程式作為一個整體運行。本指南涵蓋了實施 E2E 測試的工具、設定和步驟。
對於 Java-React 堆疊中的 E2E 測試,請使用可以與後端和前端互動的工具:
前端測試工具:
後端測試工具:
整合工具:
範例(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")); } }
模擬外部相依性:
容器化後端:
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('POST', '/api/login', { statusCode: 200, body: { token: 'fake-token' } });
後端檢定:
given() .contentType("application/json") .body("{ \"username\": \"admin\", \"password\": \"password123\" }") .when() .post("/login") .then() .statusCode(200) .body("token", notNullValue());
前端測試:
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")); } }
FROM openjdk:11 COPY target/myapp.jar /app/myapp.jar ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
CI 中的後端檢定:
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'); }); });
完全整合:
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());
Allure for Java:
@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")); }
賽普拉斯儀表板:
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'); }); });
本指南為 Java 和 React 應用程式建立了一個強大的 E2E 測試框架。如果您需要幫助實現任何特定部分,請告訴我!
以上是Java React 應用程式的端對端測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!