Como Fazer Execucao Paralela de Testes no Cucumber com Serenity
O Cucumber 7 introduziu suporte nativo para execucao paralela tanto no nivel de Feature quanto de Scenario. Esta execucao paralela pode fornecer melhorias significativas de desempenho nas execucoes de teste. Se voce deseja aproveitar essas melhorias de desempenho e executar suas Feature e Scenario do Serenity BDD em paralelo, voce precisara atualizar para o JUnit 5.
Pre-requisitos
- Cucumber 7.x
- Serenity BDD 3.9.8 ou 4.0.x
- Maven 3.x para compilar o projeto
Agora, vamos comecar com o guia passo a passo detalhado.
Passo 1: Atualizar o Serenity BDD para uma Versao Recente
Antes de prosseguir, certifique-se de ter uma versao recente do Serenity BDD. As versoes 3.9.8 ou 4.0.x sao recomendadas para melhores resultados.
Voce pode verificar sua versao atual no arquivo pom.xml ou atualiza-la para a versao mais recente.
Passo 2: Atualizar para JUnit 5 no Seu Projeto Maven
O JUnit 5 fornece a base para executar testes em paralelo com Cucumber e Serenity. Veja como voce pode atualizar para o JUnit 5 no seu arquivo pom.xml:
-
Abra o arquivo
pom.xmlno seu projeto Maven. -
Adicione as seguintes dependencias para JUnit 5 e Cucumber 7.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.10.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
...
<!-- Dependencias do JUNIT 5 -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</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-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>7.2.3</version>
<scope>test</scope>
</dependency>
</dependencies>
Mais detalhes sobre JUnit 5 e Maven podem ser encontrados no Guia do Usuario do JUnit 5.
Passo 3: Criar um Arquivo junit-platform.properties
Crie um novo arquivo chamado junit-platform.properties na sua pasta src/test/resources. Este arquivo habilita e configura a execucao paralela.
Adicione o seguinte conteudo ao arquivo:
cucumber.execution.parallel.enabled=true
cucumber.execution.parallel.config.strategy=dynamic
cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel
O caminho do plugin Cucumber mudou de io.cucumber.core.plugin.* para net.serenitybdd.cucumber.core.plugin.* no Serenity 5.0.0. Certifique-se de usar o caminho atualizado mostrado acima.
Essas propriedades habilitam a execucao paralela e a configuram para usar uma estrategia dinamica, junto com o reporter Serenity para execucao paralela.
Passo 4: Criar um Arquivo cucumber.properties
Crie um novo arquivo chamado cucumber.properties na sua pasta src/test/resources. Este arquivo contera as opcoes do Cucumber para seus testes Cucumber.
Adicione o seguinte conteudo ao arquivo:
cucumber.execution.order = random
cucumber.plugin=pretty,json:target/cucumber.json,timeline:target/test-results/timeline
cucumber.snippet-type=camelcase
Voce pode encontrar mais detalhes sobre opcoes de configuracao do Cucumber na documentacao do Cucumber.
Passo 5: Atualizar Sua Classe Runner do Cucumber
Voce deve ter uma unica classe runner para toda sua suite de testes. Atualize-a da seguinte forma:
import org.junit.platform.suite.api.IncludeEngines;
import org.junit.platform.suite.api.SelectClasspathResource;
import org.junit.platform.suite.api.Suite;
@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("/features")
public class AcceptanceTestSuite {}
Esta classe runner incluira todas as Feature no diretorio /features e as executara usando o engine do Cucumber.
Conclusao
E isso! Seguindo esses passos, voce pode aproveitar o poder da execucao paralela com Cucumber e Serenity BDD. Isso reduzira significativamente o tempo de execucao da sua suite de testes, levando a feedback mais rapido e ciclos de desenvolvimento mais eficientes.
Bons testes!