Pular para o conteúdo principal

Integrando o Serenity BDD em um projeto Maven

Maven é a ferramenta de build recomendada para o Serenity BDD.

Você pode adicionar o Serenity BDD a um projeto Maven existente adicionando as dependências correspondentes ao seu arquivo pom.xml.

Versões Recomendadas​

Primeiro, defina as versões recomendadas na seção de propriedades:

<properties>
<serenity.version>5.3.3</serenity.version>
<junit5.version>6.0.3</junit5.version>
<cucumber.version>7.34.2</cucumber.version>
</properties>

Dependências Principais​

Todos os projetos Serenity BDD precisam da seguinte dependência principal:

<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>

Você também precisará de um executor de testes, que normalmente será JUnit 5 (recomendado) ou Cucumber. Observe que o JUnit 4 está obsoleto a partir do Serenity 5.0.0.

Dependências do Serenity JUnit 5 (Recomendado)​

Para usar o JUnit 5 você precisará da seguinte dependência:

<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-junit5</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>

Você também precisará das dependências do JUnit 5, por exemplo:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>

Dependências do Serenity JUnit 4 (Obsoleto)​

JUnit 4 Obsoleto

O suporte ao JUnit 4 está obsoleto a partir do Serenity 5.0.0 e será removido no Serenity 6.0.0. Por favor, migre para o JUnit 5 (veja acima).

Se você ainda está usando o JUnit 4, precisará da seguinte dependência:

<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-junit</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>

Dependências do Serenity Cucumber​

Para o Cucumber você precisará da seguinte dependência:

<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-cucumber</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>

Como o Serenity depende de uma versão específica das APIs do Cucumber, recomendamos usar a mesma versão das bibliotecas do Cucumber.

O Cucumber requer um executor de testes, preferencialmente JUnit 5 (JUnit 4 está obsoleto).

Dependências do Cucumber com JUnit 5 (Recomendado)​

Para usar o JUnit 5 você precisará da seguinte dependência:

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit-platform-engine</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>

Veja a documentação do cucumber-junit-platform-engine sobre como usar junit-platform-suite para pilotar o cucumber: https://github.com/cucumber/cucumber-jvm/tree/main/junit-platform-engine#suites-with-different-configurations, e https://github.com/serenity-bdd/serenity-cucumber-starter para um exemplo funcional.

Dependências do Cucumber com JUnit 4 (Obsoleto)​

JUnit 4 Obsoleto

Os executores Cucumber do JUnit 4 estão obsoletos a partir do Serenity 5.0.0 e serão removidos no Serenity 6.0.0. Por favor, migre para o JUnit 5 (veja acima).

Se você ainda está usando o JUnit 4 com Cucumber, precisará da seguinte dependência:

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>

Screenplay​

Se você está usando o Screenplay Pattern, também precisará das dependências do Screenplay:

<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-screenplay</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-rest-assured</artifactId>
<version>${serenity.version}</version>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-ensure</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-screenplay-webdriver</artifactId>
<version>${serenity.version}</version>
<scope>test</scope>
</dependency>

Executando Testes com Maven Failsafe​

Os testes do Serenity são testes de integração e devem ser executados usando o plugin Maven Failsafe. A configuração básica é direta:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>

Executando Testes JUnit 5 e Cucumber Juntos​

Se seu projeto contém tanto testes JUnit 5 quanto testes Cucumber, você pode encontrar um problema onde apenas os testes Cucumber são descobertos e executados. Isso acontece porque quando o Cucumber usa a propriedade cucumber.features (seja via @ConfigurationParameter ou junit-platform.properties), isso faz com que outros seletores de descoberta da JUnit Platform sejam ignorados.

Você verá um aviso como este:

WARNING: TestEngine with ID 'cucumber' encountered a non-critical issue during test discovery:
Discovering tests using the cucumber.features property. Other discovery selectors are ignored!

A solução é configurar execuções separadas do Failsafe para testes JUnit 5 e Cucumber:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.2</version>
<executions>
<!-- Execução para testes JUnit Jupiter (exclui Cucumber) -->
<execution>
<id>junit-tests</id>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/CucumberTestSuite.java</exclude>
</excludes>
</configuration>
</execution>
<!-- Execução para testes Cucumber -->
<execution>
<id>cucumber-tests</id>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<includes>
<include>**/CucumberTestSuite.java</include>
</includes>
</configuration>
</execution>
<!-- Fase de verificação (executa uma vez após todos os testes) -->
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>

Esta configuração:

  • Executa os testes JUnit Jupiter primeiro (todos os arquivos *Test.java exceto a suíte Cucumber)
  • Executa os testes Cucumber separadamente via a classe CucumberTestSuite
  • Executa o goal verify uma vez no final para verificar falhas
Convenção de Nomenclatura

Ajuste os padrões <include> e <exclude> para corresponder às convenções de nomenclatura das suas classes de teste. Por exemplo, se sua suíte Cucumber é chamada CucumberIT.java, atualize os padrões de acordo.

O Plugin Maven do Serenity​

Se você deseja gerar os relatórios do Serenity sempre que executar mvn verify, você pode usar o serenity-maven-plugin para isso:

<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.version}</version>
<configuration>
<tags>${tags}</tags>
</configuration>
<executions>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>

Por padrão, o goal aggregate NÃO falhará o build se houver falhas de teste - ele simplesmente gerará os relatórios. Desta forma você pode agregar múltiplos conjuntos de relatórios e então verificar falhas no final usando mvn serenity:check.

Verificando arquivos de feature Gherkin​

Alguns erros em arquivos de feature Gherkin podem causar comportamento imprevisível nos relatórios do Serenity. Por esta razão, as seguintes regras devem ser seguidas ao trabalhar com Cucumber e Serenity:

  • Os nomes dos Scenario devem ser únicos dentro de um arquivo de feature
  • Os nomes de Scenario, Rule e Feature não devem estar em branco
  • Os nomes das Feature devem ser únicos sempre que possível. Em particular, features com o mesmo nome, dentro de diretórios com nomes idênticos, não aparecerão corretamente nos relatórios do Serenity.

Você pode verificar essas regras antes de executar o teste completo chamando o goal check-gherkin, por exemplo:

mvn serenity:check-gherkin

Você pode garantir que seus arquivos de feature estejam configurados corretamente antes de iniciar seus testes vinculando o goal check-gherkin à fase de ciclo de vida process-test-resources, como mostrado aqui:

<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.version}</version>
<configuration>
<tags>${tags}</tags>
</configuration>
<executions>
<execution>
<id>check-feature-files</id>
<phase>process-test-resources</phase>
<goals>
<goal>check-gherkin</goal>
</goals>
</execution>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>