1. Обзор
В этом руководстве мы покажем, как мы можем использовать выражения тега Cucumber для управления выполнением тестов и их соответствующими настройками.
Мы рассмотрим, как мы можем разделить наши тесты API и пользовательского интерфейса и контролировать, какие шаги конфигурации мы выполняем для каждого из них.
2. Приложение с компонентами пользовательского интерфейса и API
Наш пример приложения имеет простой пользовательский интерфейс для генерации случайного числа между диапазоном значений:
У нас также есть конечная точка / 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 .