Огуречная весенняя интеграция
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.