Pular para o conteúdo principal

Referencia de Configuracao do Cucumber

Esta página fornece uma referência abrangente de todas as opções de configuração para executar Cucumber com Serenity BDD e JUnit 5.

Metodos de Configuracao

Existem três maneiras de configurar o Cucumber com JUnit 5:

  1. Anotacoes @ConfigurationParameter (em classes de test suite)
  2. Arquivo junit-platform.properties (em src/test/resources)
  3. Propriedades do sistema (linha de comando ou ferramenta de build)

Ordem de prioridade: Anotações > Propriedades do Sistema > Arquivo de Propriedades

Configuracao Essencial do Serenity

Plugin Reporter do Serenity

Necessario para relatorios do Serenity

@ConfigurationParameter(
key = PLUGIN_PROPERTY_NAME,
value = "net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel"
)

Ou em junit-platform.properties:

cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel
Mudanca Importante no Serenity 5.0.0

O caminho do plugin mudou de io.cucumber.core.plugin.* para net.serenitybdd.cucumber.core.plugin.*

Reporters disponiveis:

  • SerenityReporterParallel - Thread-safe, recomendado para todos os cenários
  • SerenityReporter - Legado, não thread-safe

Configuracao Principal do Cucumber

Localizacao de Arquivos de Feature

Especifique onde encontrar arquivos de Feature:

// Abordagem com anotacao
@SelectClasspathResource("features")

// Ou usando parametro de configuracao
@ConfigurationParameter(
key = FEATURES_PROPERTY_NAME,
value = "src/test/resources/features"
)

junit-platform.properties:

cucumber.features=src/test/resources/features

Step Definitions (Glue)

Especifique pacotes contendo Step Definition:

@ConfigurationParameter(
key = GLUE_PROPERTY_NAME,
value = "com.example.stepdefinitions,com.example.hooks"
)

junit-platform.properties:

cucumber.glue=com.example.stepdefinitions,com.example.hooks

Multiplos pacotes: Separe com vírgulas

Filtragem por Tags

Filtre cenários por tags:

@ConfigurationParameter(
key = FILTER_TAGS_PROPERTY_NAME,
value = "@smoke and not @wip"
)

junit-platform.properties:

cucumber.filter.tags=@smoke and not @wip

Sintaxe de expressao de tags:

  • @tag1 and @tag2 - Ambas as tags necessárias
  • @tag1 or @tag2 - Qualquer uma das tags necessária
  • not @tag - Excluir tag
  • (@tag1 or @tag2) and not @tag3 - Expressões complexas

Linha de comando:

mvn verify -Dcucumber.filter.tags="@smoke"

Configuracao de Execucao Paralela

Habilitar Execucao Paralela

cucumber.execution.parallel.enabled=true

Estrategia de Execucao

Dinamica (recomendada):

cucumber.execution.parallel.config.strategy=dynamic
cucumber.execution.parallel.config.dynamic.factor=1.0

Cálculo do fator: threads = processadores x fator

Fixa:

cucumber.execution.parallel.config.strategy=fixed
cucumber.execution.parallel.config.fixed.parallelism=4
cucumber.execution.parallel.config.fixed.max-pool-size=4

Personalizada:

cucumber.execution.parallel.config.strategy=custom
cucumber.execution.parallel.config.custom.class=com.example.MyStrategy

Modo de Execucao Paralela

# Cenarios paralelos (padrao)
cucumber.execution.parallel.mode.default=concurrent

# Feature paralelas
cucumber.execution.parallel.mode.features.default=concurrent

Comportamento de Execucao

Ordem de Execucao

Controle a ordem de execução dos cenários:

# Ordem aleatoria (bom para encontrar dependencias de teste)
cucumber.execution.order=random

# Ordem alfabetica
cucumber.execution.order=lexicographical

# Alfabetica reversa
cucumber.execution.order=reverse

Dry Run

Verifique passos indefinidos sem executar:

@ConfigurationParameter(
key = EXECUTION_DRY_RUN_PROPERTY_NAME,
value = "true"
)

junit-platform.properties:

cucumber.execution.dry-run=true

Wip (Work In Progress)

Execute apenas cenários com tag @wip:

cucumber.execution.wip=true

Modo Strict

Trate passos indefinidos e pendentes como erros:

cucumber.execution.strict=true

Configuracao de Plugins

Multiplos Plugins

Configure múltiplos plugins:

cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel,\
pretty,\
html:target/cucumber-reports/cucumber.html,\
json:target/cucumber-reports/cucumber.json,\
junit:target/cucumber-reports/cucumber.xml

Plugins Comuns

PluginPropósitoExemplo
prettySaída no console com corespretty
htmlRelatório HTMLhtml:target/cucumber.html
jsonRelatório JSONjson:target/cucumber.json
junitRelatório XML JUnitjunit:target/cucumber.xml
timelineRelatório de timelinetimeline:target/timeline
usageRelatório de uso de passosusage:target/usage.json
rerunArquivo de cenários com falharerun:target/rerun.txt

Suprimir Mensagens do Cucumber

Suprima a mensagem "Share your results":

@ConfigurationParameter(
key = PLUGIN_PUBLISH_QUIET_PROPERTY_NAME,
value = "true"
)

junit-platform.properties:

cucumber.publish.quiet=true

Formatacao de Saida

Cores ANSI

Desabilite saída colorida no console:

@ConfigurationParameter(
key = ANSI_COLORS_DISABLED_PROPERTY_NAME,
value = "true"
)

junit-platform.properties:

cucumber.ansi-colors.disabled=true

Saida Monocromatica

cucumber.plugin=pretty,monochrome

Tipo de Snippet

Configure o estilo de snippet gerado:

# Camelcase (recomendado para Java)
cucumber.snippet-type=camelcase

# Underscore
cucumber.snippet-type=underscore

Object Factory

Object Factory Personalizada

Para injeção de dependência:

@ConfigurationParameter(
key = OBJECT_FACTORY_PROPERTY_NAME,
value = "com.example.CustomObjectFactory"
)

junit-platform.properties:

cucumber.object-factory=com.example.CustomObjectFactory

Factories comuns:

  • PicoFactory (padrão)
  • Spring
  • Guice
  • OpenEJB
  • Weld

Integracao com JUnit Platform

Descoberta de Testes

# Incluir/excluir classes de teste
junit.jupiter.testclass.include.classname.pattern=.*IT
junit.jupiter.testclass.exclude.classname.pattern=.*IntegrationTest

# Incluir/excluir metodos de teste
junit.jupiter.testmethod.include.pattern=test.*
junit.jupiter.testmethod.exclude.pattern=.*Slow

Execucao Paralela (Nivel JUnit)

junit.jupiter.execution.parallel.enabled=true
junit.jupiter.execution.parallel.mode.default=concurrent
junit.jupiter.execution.parallel.mode.classes.default=concurrent
junit.jupiter.execution.parallel.config.strategy=dynamic
junit.jupiter.execution.parallel.config.dynamic.factor=1.0

Exemplo Completo de Configuracao

junit-platform.properties Abrangente

# ==========================================
# Configuracao do Serenity BDD
# ==========================================
cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel

# ==========================================
# Arquivos de Feature e Step Definitions
# ==========================================
cucumber.features=src/test/resources/features
cucumber.glue=com.example.stepdefinitions,com.example.hooks

# ==========================================
# Filtragem
# ==========================================
cucumber.filter.tags=not @wip
cucumber.filter.name=.*checkout.*

# ==========================================
# Execucao Paralela
# ==========================================
cucumber.execution.parallel.enabled=true
cucumber.execution.parallel.config.strategy=dynamic
cucumber.execution.parallel.config.dynamic.factor=1.0

# ==========================================
# Comportamento de Execucao
# ==========================================
cucumber.execution.order=random
cucumber.execution.dry-run=false
cucumber.execution.strict=true

# ==========================================
# Plugins e Relatorios
# ==========================================
cucumber.plugin=pretty,\
html:target/cucumber-reports/cucumber.html,\
json:target/cucumber-reports/cucumber.json,\
junit:target/cucumber-reports/cucumber.xml
cucumber.publish.quiet=true

# ==========================================
# Formatacao de Saida
# ==========================================
cucumber.ansi-colors.disabled=false
cucumber.snippet-type=camelcase

# ==========================================
# JUnit Platform
# ==========================================
junit.jupiter.execution.parallel.enabled=false
junit.jupiter.testinstance.lifecycle.default=per_method

Exemplo Completo de Test Suite

import org.junit.platform.suite.api.*;
import static io.cucumber.junit.platform.engine.Constants.*;

@Suite
@IncludeEngines("cucumber")
@SelectClasspathResource("features")
@ConfigurationParameter(
key = PLUGIN_PROPERTY_NAME,
value = "net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel"
)
@ConfigurationParameter(
key = GLUE_PROPERTY_NAME,
value = "com.example.stepdefinitions"
)
@ConfigurationParameter(
key = FILTER_TAGS_PROPERTY_NAME,
value = "@smoke and not @wip"
)
@ConfigurationParameter(
key = PLUGIN_PUBLISH_QUIET_PROPERTY_NAME,
value = "true"
)
class CucumberTestSuite {
}

Configuracao Especifica por Ambiente

Usando Profiles

Crie múltiplos arquivos de propriedades:

src/test/resources/
├── junit-platform.properties (padrao)
├── junit-platform-ci.properties (ambiente de CI)
└── junit-platform-dev.properties (desenvolvimento)

Ative via Maven:

mvn verify -Dprofile=ci

Variaveis de Ambiente

Sobrescreva propriedades usando variáveis de ambiente:

export CUCUMBER_FILTER_TAGS="@smoke"
export CUCUMBER_EXECUTION_PARALLEL_ENABLED=true
mvn verify

Referencia de Constantes

Todas as constantes de io.cucumber.junit.platform.engine.Constants:

ConstanteChave da Propriedade
ANSI_COLORS_DISABLED_PROPERTY_NAMEcucumber.ansi-colors.disabled
EXECUTION_DRY_RUN_PROPERTY_NAMEcucumber.execution.dry-run
EXECUTION_ORDER_PROPERTY_NAMEcucumber.execution.order
EXECUTION_STRICT_PROPERTY_NAMEcucumber.execution.strict
FEATURES_PROPERTY_NAMEcucumber.features
FILTER_NAME_PROPERTY_NAMEcucumber.filter.name
FILTER_TAGS_PROPERTY_NAMEcucumber.filter.tags
GLUE_PROPERTY_NAMEcucumber.glue
OBJECT_FACTORY_PROPERTY_NAMEcucumber.object-factory
PLUGIN_PROPERTY_NAMEcucumber.plugin
PLUGIN_PUBLISH_ENABLED_PROPERTY_NAMEcucumber.publish.enabled
PLUGIN_PUBLISH_QUIET_PROPERTY_NAMEcucumber.publish.quiet
PLUGIN_PUBLISH_TOKEN_PROPERTY_NAMEcucumber.publish.token
SNIPPET_TYPE_PROPERTY_NAMEcucumber.snippet-type

Proximos Passos

Recursos Adicionais