Brug af agurkemærker med JUnit 5
1. Oversigt
I denne øvelse vil vi illustrere, hvordan vi kan bruge Cucumber tag-udtryk til at manipulere udførelsen af tests og deres relevante opsætninger.
Vi skal se på, hvordan vi kan adskille vores API- og UI-tests og kontrollere, hvilke konfigurationstrin vi kører for hver.
2. Applikation med UI- og API-komponenter
Vores eksempelapplikation har en simpel brugergrænseflade til at generere et tilfældigt tal mellem en række værdier:
Vi har også en /status Hvileendepunkt returnerer en HTTP-statuskode. Vi dækker begge disse funktioner med accepttest ved hjælp af Agurk og 5. juni.
For at agurk kan fungere med Junit 5, skal vi erklære agurk –junit-platform-motor som dens afhængighed i vores pom :
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>6.10.3</version>
</dependency>
3. Agurkemærker og betingede kroge
Agurkemærker kan hjælpe os med at gruppere vores scenarier sammen. Lad os sige, at vi har forskellige krav til test af UI og API. For eksempel skal vi starte en browser for at teste UI-komponenterne, men det er ikke nødvendigt for at kalde /status endepunkt. Det, vi har brug for, er en måde at finde ud af, hvilke trin vi skal køre og hvornår. Agurkemærker kan hjælpe os med dette.
4. UI-tests
Lad os først gruppere vores Funktioner eller Scenarier sammen ved et tag. Her markerer vi vores UI-funktion med et @ui tag:
@ui
Feature: UI - Random Number Generator
Scenario: Successfully generate a random number
Given we are expecting a random number between min and max
And I am on random-number-generator page
When I enter min 1
And I enter max 10
And I press Generate button
Then I should receive a random number between 1 and 10
Derefter kan vi, baseret på disse tags, manipulere, hvad vi kører for denne gruppe af funktioner ved at bruge betingede kroge. Vi gør dette med separate @Before og @After metoder, der er kommenteret med de relevante tags i vores ScenarioHooks :
@Before("@ui")
public void setupForUI() {
uiContext.getWebDriver();
}
@After("@ui")
public void tearDownForUi(Scenario scenario) throws IOException {
uiContext.getReport().write(scenario);
uiContext.getReport().captureScreenShot(scenario, uiContext.getWebDriver());
uiContext.getWebDriver().quit();
}
5. API-tests
På samme måde som vores UI-tests kan vi markere vores API-funktion med @api tag:
@api
Feature: Health check
Scenario: Should have a working health check
When I make a GET call on /status
Then I should receive 200 response status code
And should receive a non-empty body
Vi har også vores @Before og @After metoder med @api tag:
@Before("@api")
public void setupForApi() {
RestAssuredMockMvc.mockMvc(mvc);
RestAssuredMockMvc.config = RestAssuredMockMvc.config()
.logConfig(new LogConfig(apiContext.getReport().getRestLogPrintStream(), true));
}
@After("@api")
public void tearDownForApi(Scenario scenario) throws IOException {
apiContext.getReport().write(scenario);
}
Når vi kører vores AcceptanceTestRunnerIT, vi kan se, at vores passende opsætnings- og nedtagningstrin udføres for de relevante tests.
6. Konklusion
I denne artikel har vi vist, hvordan vi kan kontrollere udførelsen af forskellige sæt af test og deres opsætnings-/nedrivningsinstruktioner ved at bruge Agurkemærker og betingede kroge.
Som altid er koden til denne artikel tilgængelig på GitHub.