1. Обзор
Cucumber-это очень мощный фреймворк тестирования, написанный на языке программирования Ruby, который следует методологии BDD (behavior-driven development). Он позволяет разработчикам писать высокоуровневые варианты использования в виде простого текста, который может быть проверен нетехническими заинтересованными сторонами, и превращать их в исполняемые тесты, написанные на языке, называемом Корнишон.
Мы уже обсуждали их в другой статье .
А интеграция Cucumber-Spring предназначена для упрощения автоматизации тестирования. Как только мы интегрируем тесты Cucumber с Spring, мы сможем выполнить их вместе со сборкой Maven.
2. Зависимости Maven
Давайте начнем использовать интеграцию Cucumber-Spring, определив зависимости Maven – начиная с зависимости Cucumber-JVM:
io.cucumber cucumber-java 6.8.0 test
Мы можем найти самую последнюю версию Cucumber JVM здесь .
Далее мы добавим зависимость тестирования JUnit и Cucumber:
io.cucumber cucumber-junit 6.8.0 test
Самую последнюю версию Cucumber JUnit можно найти здесь .
И, наконец, Весенняя и Огуречная зависимость:
io.cucumber cucumber-spring 6.8.0 test
Опять же, мы можем проверить самую последнюю версию Cucumber Spring здесь .
3. Конфигурация
Теперь мы рассмотрим, как мы можем интегрировать огурец в весеннее приложение.
Во – первых, мы создадим приложение Spring Boot, для которого мы будем следовать статье приложения Spring-Boot . Затем мы создадим службу весеннего отдыха и напишем для нее тест на огурец.
3.1. Контроллер ОТДЫХА
Во-первых, давайте создадим простой контроллер:
@RestController
public class VersionController {
@GetMapping("/version")
public String getVersion() {
return "1.0";
}
}3.2. Определения шага Огурца
Все, что нам нужно для запуска наших тестов Cucumber с JUnit, – это создать один пустой класс с аннотацией @RunWith(Cucumber.class) :
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class CucumberIntegrationTest {
}Мы можем видеть аннотацию @CucumberOptions , где мы указываем местоположение файла корнишона, который также известен как файл объектов. На этом этапе Огурец распознает язык корнишонов; вы можете прочитать больше о корнишонах в статье, упомянутой во введении.
Итак, теперь давайте создадим файл функций Cucumber:
Feature: the version can be retrieved
Scenario: client makes call to GET /version
When the client calls /version
Then the client receives status code of 200
And the client receives server version 1.0Сценарий заключается в том, чтобы сделать вызов GET по URL-адресу службы REST /version и проверить ответ.
Далее нам нужно создать так называемый код клея. Это методы, которые связывают один шаг Корнишона с кодом Java.
Здесь у нас есть варианты – мы можем использовать выражения Cucumber или регулярные выражения внутри аннотаций. В нашем случае мы будем придерживаться регулярных выражений:
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable{
executeGet("http://localhost:8080/version");
}
@Then("^the client receives status code of (\\d+)$")
public void the_client_receives_status_code_of(int statusCode) throws Throwable {
HttpStatus currentStatusCode = latestResponse.getTheResponse().getStatusCode();
assertThat("status code is incorrect : "+
latestResponse.getBody(), currentStatusCode.value(), is(statusCode));
}
@And("^the client receives server version (.+)$")
public void the_client_receives_server_version_body(String version) throws Throwable {
assertThat(latestResponse.getBody(), is(version));
}Итак, теперь давайте интегрируем тесты Cucumber с контекстом приложения Spring. Для этого мы создадим новый класс и аннотируем его с помощью @SpringBootTest и @CucumberContextConfiguration :
@CucumberContextConfiguration
@SpringBootTest
public class SpringIntegrationTest {
// executeGet implementation
}Теперь все определения Cucumber могут перейти в отдельный класс Java, который расширяет Spring Integration Test :
public class StepDefs extends SpringIntegrationTest {
@When("^the client calls /version$")
public void the_client_issues_GET_version() throws Throwable {
executeGet("http://localhost:8080/version");
}
}Теперь мы все готовы к тестовому запуску.
Наконец, мы можем выполнить быстрый запуск через командную строку, просто запустив mvn clean install-Pintegration – Maven выполнит интеграционные тесты и покажет результаты в консоли.
3 Scenarios ([32m3 passed[0m) 9 Steps ([32m9 passed[0m) 0m1.054s Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.283 sec - in com.baeldung.CucumberTest 2016-07-30 06:28:20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: startup date [Sat Jul 30 06:28:12 CDT 2016]; root of context hierarchy Results : Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
4. Заключение
Настроив Cucumber с Spring, будет удобно использовать компоненты, настроенные на Spring, в тестировании BDD. Это простое руководство по интеграции теста Cucumber в приложение Spring-Boot.
Как обычно, все примеры кода, показанные в этом руководстве, доступны на GitHub .