Integração de Primavera de Pepino

Integração de Primavera de Pepino

1. Visão geral

O pepino é uma estrutura de teste muito poderosa, escrita na linguagem de programação Ruby, que segue a metodologia BDD (development-driven development). Sua intenção é permitir que os desenvolvedores escrevam casos de uso de alto nível em texto simples que possam ser verificados por partes interessadas não técnicas e os transformem em testes executáveis, escritos em uma linguagem chamada Gherkin.

Já discutimos isso em adifferent article.

E oCucumber-Spring Integration se destina a tornar a automação de teste mais fácil. Assim que tivermos os testes de pepino integrados ao Spring, poderemos executá-los junto com a compilação do Maven.

2. Dependências do Maven

Vamos começar a usar a integração Cucumber-Spring, definindo as dependências Maven - começando com a dependência Cucumber-JVM:


    info.cukes
    cucumber-java
    1.2.4
    test

A versão mais recente do Cucumber JVM pode ser encontradahere.

A seguir, adicionaremos a dependência de teste JUnit e Cucumber:


    info.cukes
    cucumber-junit
    1.2.4
    test

A versão mais recente do Cucumber JUnit pode ser encontradahere.

E, finalmente, a dependência da Primavera e do Pepino:


    info.cukes
    cucumber-spring
    1.2.4
    test

A versão mais recente do Cucumber Spring pode ser encontradahere.

3. Configuração

Vamos agora ver como podemos integrar o Cucumber em um aplicativo de serviço Spring Micro. A primeira etapa é criar um aplicativo Spring Boot - para o qual seguiremosSpring-Boot application article.

Em seguida, criaremos um serviço Spring REST no aplicativo de inicialização e escreveremos o teste Cucumber para este serviço REST.

3.1. Controlador REST

Como primeiro passo, vamos criar uma classe de controlador para uma API REST simples:

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

3.2. Definições de etapas de pepino

O corredor JUnit usa a estrutura JUnit para executar o Teste de Pepino. Tudo o que precisamos é criar uma única classe vazia com uma anotação@RunWith(Cucumber.class):

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

Podemos ver a anotação@CucumberOptions em que especificamos a localização do arquivo Gherkin, também conhecido como arquivo de feição. Neste ponto, pepino reconhece a linguagem pepino; você pode ler mais sobre Gherkin no artigo mencionado na introdução.

Então agora vamos criar um arquivo de recurso de pepino:

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

E vamos dar uma olhada no arquivo de recurso. O cenário é fazer uma chamada GET para o serviço REST url/versione declarar a resposta.

A próxima etapa é criar o método na classe Java para corresponder a este caso de teste:

@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));
}

Portanto, agora precisamos executar esses métodos de caso de teste de pepino usando Maven e Spring. Crie uma classe que possa ser executada com Spring-JUnit para que o Maven possa executar a classe de teste:

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

}

Agora todas as definições de pepino podem entrar em uma classe Java separada que se estende à classe Java mencionada acima:

public class StepDefs extends SpringIntegrationTest {

    @When("^the client calls /version$")
    public void the_client_issues_GET_version() throws Throwable {
        executeGet("http://localhost:8080/version");
    }
}

Estamos prontos para um teste agora.

Podemos fazer uma execução rápida via linha de comando, simplesmente executandomvn clean install -Pintegration – o Maven executará os testes de integração e mostrará os resultados no console.

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. Conclusão

Depois de configurar o Pepino com o Spring, será útil usar componentes configurados pelo Spring nos testes de BDD. Este é um guia simples para integrar o teste de pepino em um aplicativo Spring-Boot.

Você pode encontrar um projeto de exemplo com base no código deste artigo emlinked GitHub repository.