Рубрики
Без рубрики

Интеграция огуречной весны

Краткое руководство по интеграции фреймворка тестирования огурцов с Spring.

Автор оригинала: baeldung.

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 .