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

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

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

1. Введение

Cucumber — это инструмент автоматизации тестирования, который поддерживает разработку, управляемую поведением (BDD). Он запускает спецификации, написанные в виде простого текста с синтаксисом Gherkin, который описывает поведение системы.

В этом руководстве мы рассмотрим несколько способов интеграции Cucumber с Gradle для запуска спецификаций BDD в рамках сборки проекта.

2. Настройка

Во-первых, давайте настроим проект Gradle, используя Gradle Wrapper .

Далее мы добавим зависимость огурца-java в build.gradle :

testImplementation 'io.cucumber:cucumber-java:6.10.4'

Это добавляет официальную реализацию Cucumber Java в наш проект.

3. Запуск с использованием пользовательской задачи

Чтобы запустить наши спецификации с помощью Gradle, мы создадим задачу, использующую средство запуска интерфейса командной строки (CLI) от Cucumber .

3.1. Конфигурация

Начнем с добавления необходимой конфигурации в файл build.gradle проекта :

configurations {
cucumberRuntime {
extendsFrom testImplementation
}
}

Далее мы создадим пользовательскую задачу CucumberCli :

task cucumberCli() {
dependsOn assemble, testClasses
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = [
'--plugin', 'pretty',
'--plugin', 'html:target/cucumber-report.html',
'--glue', 'com.foreach.cucumber',
'src/test/resources']
}
}
}

Эта задача настроена на выполнение всех тестовых сценариев, найденных в файлах .feature в каталоге src/test/resources .

Параметр –glue для класса Main указывает расположение файлов определения шагов, необходимых для запуска сценариев.

Параметр –plugin указывает формат и расположение отчетов о тестировании. Мы можем комбинировать несколько значений для создания отчета(ов) в требуемом(ых) формате(ах), например, симпатичном и HTML , как в нашем примере.

Доступно несколько других вариантов . Например, есть возможность фильтровать тесты по именам и тегам.

3.2. Сценарий

Теперь давайте создадим простой сценарий для нашего приложения в файле src/test/resources/features/account_credited.feature :

Feature: Account is credited with amount

Scenario: Credit amount
Given account balance is 0.0
When the account is credited with 10.0
Then account should have a balance of 10.0

Далее мы реализуем соответствующие определения шагов — клей — необходимые для запуска сценария:

public class StepDefinitions {

@Given("account balance is {double}")
public void givenAccountBalance(Double initialBalance) {
account = new Account(initialBalance);
}

// other step definitions

}

3.3. Запустить задачу

Наконец, давайте запустим нашу задачу CucumberCli из командной строки:

>> ./gradlew cucumberCli

> Task :cucumberCli

Scenario: Credit amount # src/test/resources/features/account_credited.feature:3
Given account balance is 0.0 # com.foreach.cucumber.StepDefinitions.account_balance_is(java.lang.Double)
When the account is credited with 10.0 # com.foreach.cucumber.StepDefinitions.the_account_is_credited_with(java.lang.Double)
Then account should have a balance of 10.0 # com.foreach.cucumber.StepDefinitions.account_should_have_a_balance_of(java.lang.Double)

1 Scenarios (1 passed)
3 Steps (3 passed)
0m0.381s

Как мы видим, наша спецификация была интегрирована с Gradle, успешно работает, и вывод отображается в консоли. Кроме того, отчет о тестировании в формате HTML доступен в указанном месте.

4. Запуск с использованием JUnit

Вместо создания пользовательской задачи в Gradle мы можем использовать JUnit для запуска сценариев с огурцами.

Начнем с включения зависимости огурца-junit :

testImplementation 'io.cucumber:cucumber-junit:6.10.4'

Поскольку мы используем JUnit 5, нам также нужно добавить зависимость junit-vintage-engine :

testImplementation 'org.junit.vintage:junit-vintage-engine:5.7.2'

Далее мы создадим пустой класс бегуна в расположении тестовых источников:

@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "html:target/cucumber-report.html"},
features = {"src/test/resources"}
)
public class RunCucumberTest {
}

Здесь мы использовали бегун JUnit Cucumber в аннотации @RunWith . Кроме того, все параметры запуска CLI, такие как функции и плагины , доступны через аннотацию @CucumberOptions .

Теперь выполнение стандартной тестовой задачи Gradle найдет и запустит все тесты функций `` в дополнение к любым другим модульным тестам:

>> ./gradlew test

> Task :test

RunCucumberTest > Credit amount PASSED

BUILD SUCCESSFUL in 2s

5. Запуск с помощью плагина

Последний подход заключается в использовании стороннего плагина, который позволяет запускать спецификации из сборки Gradle.

В нашем примере мы будем использовать плагин gradle-cucumber-runner для запуска Cucumber JVM. Под капотом это перенаправляет все вызовы исполнителю CLI, который мы использовали ранее. Включим его в наш проект:

plugins {
id "se.thinkcode.cucumber-runner" version "0.0.8"
}

Это добавляет в нашу сборку задачу с огурцом , и теперь мы можем запустить ее с настройками по умолчанию:

>> ./gradlew cucumber

Стоит отметить, что это не официальный плагин Cucumber , и есть и другие доступные, которые обеспечивают аналогичную функциональность.

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

В этой статье мы продемонстрировали несколько способов настройки и запуска спецификаций BDD с помощью Gradle.

Сначала мы рассмотрели, как создать пользовательскую задачу с помощью средства запуска CLI. Затем мы рассмотрели использование Cucumber JUnit runner для выполнения спецификаций с использованием существующей задачи Gradle. Наконец, мы использовали сторонний плагин для запуска Cucumber без создания собственных пользовательских задач.

Как всегда, полный исходный код можно найти на GitHub .