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

Огуречная весенняя интеграция

1. обзор

Cucumber - это очень мощная среда тестирования, написанная на языке программирования Ruby, которая следует методологии BDD (поведенческая разработка). Его цель состоит в том, чтобы позволить разработчикам писать высокоуровневые сценарии использования в виде простого текста, которые могут быть проверены нетехническими заинтересованными сторонами, и превращать их в исполняемые тесты, написанные на языке под названием Gherkin.

Мы уже обсуждали это вdifferent article.

АCucumber-Spring Integration предназначен для упрощения автоматизации тестирования. После того, как тесты Cucumber будут интегрированы в Spring, мы сможем выполнить их вместе со сборкой Maven.

2. Maven Зависимости

Давайте начнем использовать интеграцию Cucumber-Spring, определив зависимости Maven - начиная с зависимости Cucumber-JVM:


    info.cukes
    cucumber-java
    1.2.4
    test

Самую последнюю версию Cucumber JVM можно найтиhere.

Затем мы добавим зависимость тестирования JUnit и Cucumber:


    info.cukes
    cucumber-junit
    1.2.4
    test

Самую последнюю версию Cucumber JUnit можно найтиhere.

И, наконец, зависимость Spring и Cucumber:


    info.cukes
    cucumber-spring
    1.2.4
    test

Самую последнюю версию Cucumber Spring можно найтиhere.

3. конфигурация

Теперь мы рассмотрим, как интегрировать Cucumber в сервисное приложение Spring Micro. Первым шагом является создание приложения Spring Boot, для которого мы будем следоватьSpring-Boot application article.

Затем мы создадим службу Spring REST в приложении Boot и напишем тест Cucumber для этой службы REST.

3.1. REST Controller

В качестве первого шага давайте создадим класс контроллера для простого REST API:

@RestController
public class VersionController {
    @RequestMapping(method={RequestMethod.GET},value={"/version"})
    public String getVersion() {
        return "1.0";
    }
}

3.2. Определения шага огурца

Средство запуска JUnit использует инфраструктуру JUnit для запуска теста на огурец. Все, что нам нужно, это создать единственный пустой класс с аннотацией@RunWith(Cucumber.class):

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources")
public class CucumberTest {
}

Мы видим аннотацию@CucumberOptions, в которой мы указываем расположение файла Gherkin, который также известен как файл функций. На этом этапе огурец распознает корнишон; Вы можете прочитать больше о корнишоне в статье, упомянутой во введении.

Итак, теперь давайте создадим файл объектов 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, который соответствует этому тестовому примеру:

@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, используя Maven и Spring. Создайте класс, который может работать с Spring-JUnit, чтобы Maven мог выполнять эти тестовые классы:

@ContextConfiguration(
  classes = SpringDemoApplication.class,
  loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest
public class SpringIntegrationTest {

}

Теперь все определения Cucumber могут входить в отдельный класс Java, который распространяется на класс Java, упомянутый выше:

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.example.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.

Вы можете найти пример проекта, основанный на коде из этой статьи, в папкеlinked GitHub repository.