Перейти к основному содержимому

Использование тегов огурца с JUnit 5

· 3 мин. чтения

1. Обзор

В этом руководстве мы покажем, как мы можем использовать выражения тега Cucumber для управления выполнением тестов и их соответствующими настройками.

Мы рассмотрим, как мы можем разделить наши тесты API и пользовательского интерфейса и контролировать, какие шаги конфигурации мы выполняем для каждого из них.

2. Приложение с компонентами пользовательского интерфейса и API

Наш пример приложения имеет простой пользовательский интерфейс для генерации случайного числа между диапазоном значений:

./202733123c6b5b555343d0e4a0c35e0f.png

У нас также есть конечная точка / status Rest, возвращающая код состояния HTTP. Мы рассмотрим обе эти функции с помощью приемочных тестов с использованием Cucumber и Junit 5 .

Чтобы огурец работал с Junit 5, мы должны объявить огурецjunit-platform-engine как его зависимость в нашем pom :

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>6.10.3</version>
</dependency>

3. Огуречные теги и условные хуки

Теги огурца могут помочь нам сгруппировать наши сценарии вместе. Допустим, у нас разные требования к тестированию UI и API. Например, нам нужно запустить браузер для тестирования компонентов пользовательского интерфейса, но это не обязательно для вызова конечной точки /status . Что нам нужно, так это способ выяснить, какие шаги выполнять и когда. Огуречные теги могут нам в этом помочь.

4. Тесты пользовательского интерфейса

Во-первых, давайте сгруппируем наши функции или сценарии вместе по тегу. Здесь мы помечаем нашу функцию пользовательского интерфейса тегом @ui :

@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

Затем, на основе этих тегов, мы можем манипулировать тем, что мы запускаем для этой группы функций, используя условные ловушки. Мы делаем это с помощью отдельных методов @Before и @After , аннотированных соответствующими тегами в наших 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

Подобно нашим тестам пользовательского интерфейса, мы можем пометить нашу функцию API тегом @api :

@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

У нас также есть методы @Before и @After с тегом @api :

@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);
}

Когда мы запускаем наш AcceptanceTestRunnerIT, мы видим, что для соответствующих тестов выполняются соответствующие шаги по настройке и демонтажу.

6. Заключение

В этой статье мы показали, как мы можем контролировать выполнение различных наборов тестов и инструкции по их настройке/удалению с помощью тегов Cucumber и условных хуков.

Как всегда, код для этой статьи доступен на GitHub .