Teste integrados com Cucumber e java/Junit
Este artigo iremos discutir como configurar o framework de teste Cucumber junto com Java/Junit para escrever teste integrados de um determinado sistema.
Introdução
Durante o desenvolvimento de software existe a necessidade de executarmos testes para validar e garantir a qualidade do que foi desenvolvido, assim como a funcionalidade que compõe esse desenvolvimento. Atualmente, a comunidade, difundi vários tipos de testes, e cada um, com foco em uma determinada especificação.
Dentre estes vários tipos de testes, os Testes Integrados surge quando os módulos do software são integrados logicamente e testados como um grupo. Um projeto de software típico consiste em vários módulos de software, codificados por diferentes programadores. O objetivo deste nível de teste é expor defeitos na interação entre esses módulos de software quando eles são integrados. Ou seja, os Testes Integrados concentra-se em verificar a comunicação de dados entre esses módulos.
Existem várias formas de executar testes integrados em uma determinada aplicação. Aqui discutiremos uma forma de executar tais usando Cucumber e Java.
Cucumber
O Cucumber é uma framework com suporte ao BDD — Behaviour-Driven Development(BDD) que permite automatizar testes que são criados, normalmente através do BDD. Se ainda não estiver familiarizado com BDD aconselho que comece por aqui https://cucumber.io/docs/bdd/.
Cucumber lê especificações executáveis escritas em texto simples e valida se o software faz o que essas especificações dizem. As especificações consistem em vários exemplos ou cenários . Por exemplo:
Cenario: Validar funcionalidade de logout
Dado que estou na página inicial do Github
Quando especifico o nome de usuário/senha
E clico no botão SignIn
Então devo poder ver a opção de logoutCada cenário é uma lista de etapas (steps) para o Cucumber trabalhar. O Cucumber verifica se o software está em conformidade com a especificação e gera um relatório indicando sucesso ou falha para cada cenário.
Para que o Cucumber entenda os cenários, eles devem seguir algumas regras básicas de sintaxe, chamadas de Gherkin.
Mão na massa!
Primeiramente criaremos um projeto Java para criarmos nossos testes. Usaremos o gerenciador de dependências Maven e para criar o projeto execute:
mvn archetype:generate \
"-DpackageName=br.com.cahenre" \
"-DarchetypeGroupId=io.cucumber" \
"-DarchetypeArtifactId=cucumber-archetype"\
"-DarchetypeVersion=7.5.0" \
"-DgroupId=testesIntegrados" \
"-DartifactId=testesIntegrados" \
"-Dpackage=testesIntegrados" \
"-Dversion=1.0.0-SNAPSHOT" \
"-DinteractiveMode=false"No caso estaremos criando um projeto chamado testeIntegrados, com o plugin Maven `cucumber-archetype`. Com isso nosso projeto já terá as dependências necessárias. Caso prefira você pode adicionar em seu projeto:
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>Caso esteja utilizando o IntelliJ sugiro que instale o plugin do cucumber, basta seguir: https://www.jetbrains.com/help/idea/cucumber-support.html
Caso tenha dado tudo certo o projeto terá a seguinte estrutura inicial:
