Java >> Java tutorial >  >> Tag >> JUnit

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 agurkjunit-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.


Java tag