End-to-End (E2E)-Tests stellen sicher, dass Ihre Anwendung als Ganzes funktioniert, indem echte Benutzerworkflows im Backend (Java) und Frontend (React) simuliert werden. In diesem Leitfaden werden die Tools, die Einrichtung und die Schritte zur Implementierung von E2E-Tests behandelt.
Verwenden Sie für E2E-Tests in einem Java-React-Stack Tools, die sowohl mit dem Backend als auch mit dem Frontend interagieren können:
Frontend-Testtools:
Backend-Testtools:
Integrationstools:
Beispiel (REST Assured-Test für eine 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")); } }
Mock External Dependencies:
Backend Containerisieren:
FROM openjdk:11 COPY target/myapp.jar /app/myapp.jar ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
npm install cypress --save-dev
Cypress-Tests erstellen:
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'); }); });
Mock-APIs in Cypress:
cy.intercept('POST', '/api/login', { statusCode: 200, body: { token: 'fake-token' } });
Backend-Test:
given() .contentType("application/json") .body("{ \"username\": \"admin\", \"password\": \"password123\" }") .when() .post("/login") .then() .statusCode(200) .body("token", notNullValue());
Frontend-Test:
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"]
Backend-Tests in CI:
npm install cypress --save-dev
Frontend-Tests in 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'); }); });
Vollständige Integration:
cy.intercept('POST', '/api/login', { statusCode: 200, body: { token: 'fake-token' } });
GitHub-Aktionen für CI:
given() .contentType("application/json") .body("{ \"username\": \"admin\", \"password\": \"password123\" }") .when() .post("/login") .then() .statusCode(200) .body("token", notNullValue());
Allure für 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")); }
Cypress Dashboard:
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'); }); });
Dieser Leitfaden richtet ein robustes E2E-Testframework für eine Java- und React-Anwendung ein. Lassen Sie mich wissen, wenn Sie Hilfe bei der Implementierung eines bestimmten Teils benötigen!
Das obige ist der detaillierte Inhalt vonEnd-to-End-Tests für Java React-Anwendungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!