Saltar al contenido principal

Referencia de Configuración de Cucumber

Esta página proporciona una referencia completa de todas las opciones de configuración para ejecutar Cucumber con Serenity BDD y JUnit 5.

Métodos de Configuración

Hay tres formas de configurar Cucumber con JUnit 5:

  1. Anotaciones @ConfigurationParameter (en clases de suite de pruebas)
  2. Archivo junit-platform.properties (en src/test/resources)
  3. Propiedades del sistema (línea de comandos o herramienta de compilación)

Orden de prioridad: Anotaciones > Propiedades del Sistema > Archivo de Propiedades

Configuración Esencial de Serenity

Plugin Reporter de Serenity

Requerido para reportes de Serenity

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

O en junit-platform.properties:

cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel
Cambio Importante en Serenity 5.0.0

La ruta del plugin cambió de io.cucumber.core.plugin.* a net.serenitybdd.cucumber.core.plugin.*

Reporter disponibles:

  • SerenityReporterParallel - Seguro para hilos, recomendado para todos los escenarios
  • SerenityReporter - Legacy, no seguro para hilos

Configuración Principal de Cucumber

Ubicación de Archivos Feature

Especifica dónde encontrar los archivos Feature:

// Enfoque con anotación
@SelectClasspathResource("features")

// O usando parámetro de configuración
@ConfigurationParameter(
key = FEATURES_PROPERTY_NAME,
value = "src/test/resources/features"
)

junit-platform.properties:

cucumber.features=src/test/resources/features

Step Definition (Glue)

Especifica los paquetes que contienen los 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

Múltiples paquetes: Sepáralos con comas

Filtrado por Etiquetas

Filtra escenarios por etiquetas:

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

junit-platform.properties:

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

Sintaxis de expresiones de etiquetas:

  • @tag1 and @tag2 - Ambas etiquetas requeridas
  • @tag1 or @tag2 - Cualquiera de las etiquetas requerida
  • not @tag - Excluir etiqueta
  • (@tag1 or @tag2) and not @tag3 - Expresiones complejas

Línea de comandos:

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

Configuración de Ejecución Paralela

Habilitar Ejecución Paralela

cucumber.execution.parallel.enabled=true

Estrategia de Ejecución

Dinámica (recomendada):

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

Cálculo del factor: hilos = procesadores x factor

Fija:

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 Ejecución Paralela

# Escenarios en paralelo (por defecto)
cucumber.execution.parallel.mode.default=concurrent

# Feature en paralelo
cucumber.execution.parallel.mode.features.default=concurrent

Comportamiento de Ejecución

Orden de Ejecución

Controla el orden de ejecución de escenarios:

# Orden aleatorio (bueno para encontrar dependencias entre pruebas)
cucumber.execution.order=random

# Orden alfabético
cucumber.execution.order=lexicographical

# Alfabético inverso
cucumber.execution.order=reverse

Dry Run

Verifica pasos no definidos sin ejecutar:

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

junit-platform.properties:

cucumber.execution.dry-run=true

Wip (Work In Progress)

Ejecuta solo escenarios etiquetados con @wip:

cucumber.execution.wip=true

Modo Estricto

Trata los pasos no definidos y pendientes como errores:

cucumber.execution.strict=true

Configuración de Plugins

Múltiples Plugins

Configura múltiples 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 Comunes

PluginPropósitoEjemplo
prettySalida de consola con colorespretty
htmlReporte HTMLhtml:target/cucumber.html
jsonReporte JSONjson:target/cucumber.json
junitReporte JUnit XMLjunit:target/cucumber.xml
timelineReporte de línea de tiempotimeline:target/timeline
usageReporte de uso de pasosusage:target/usage.json
rerunArchivo de escenarios fallidosrerun:target/rerun.txt

Suprimir Mensajes de Cucumber

Suprime el mensaje "Share your results":

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

junit-platform.properties:

cucumber.publish.quiet=true

Formato de Salida

Colores ANSI

Deshabilita la salida de consola con colores:

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

junit-platform.properties:

cucumber.ansi-colors.disabled=true

Salida Monocromática

cucumber.plugin=pretty,monochrome

Tipo de Snippet

Configura el estilo de snippet generado:

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

# Underscore
cucumber.snippet-type=underscore

Object Factory

Object Factory Personalizado

Para inyección de dependencias:

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

junit-platform.properties:

cucumber.object-factory=com.example.CustomObjectFactory

Factory comunes:

  • PicoFactory (por defecto)
  • Spring
  • Guice
  • OpenEJB
  • Weld

Integración con JUnit Platform

Descubrimiento de Pruebas

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

# Incluir/excluir métodos de prueba
junit.jupiter.testmethod.include.pattern=test.*
junit.jupiter.testmethod.exclude.pattern=.*Slow

Ejecución 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

Ejemplo de Configuración Completa

junit-platform.properties Completo

# ==========================================
# Configuración de Serenity BDD
# ==========================================
cucumber.plugin=net.serenitybdd.cucumber.core.plugin.SerenityReporterParallel

# ==========================================
# Archivos Feature y Step Definition
# ==========================================
cucumber.features=src/test/resources/features
cucumber.glue=com.example.stepdefinitions,com.example.hooks

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

# ==========================================
# Ejecución Paralela
# ==========================================
cucumber.execution.parallel.enabled=true
cucumber.execution.parallel.config.strategy=dynamic
cucumber.execution.parallel.config.dynamic.factor=1.0

# ==========================================
# Comportamiento de Ejecución
# ==========================================
cucumber.execution.order=random
cucumber.execution.dry-run=false
cucumber.execution.strict=true

# ==========================================
# Plugins y Reportes
# ==========================================
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

# ==========================================
# Formato de Salida
# ==========================================
cucumber.ansi-colors.disabled=false
cucumber.snippet-type=camelcase

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

Ejemplo Completo de Suite de Pruebas

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 {
}

Configuración Específica por Entorno

Usando Perfiles

Crea múltiples archivos de propiedades:

src/test/resources/
├── junit-platform.properties (por defecto)
├── junit-platform-ci.properties (entorno CI)
└── junit-platform-dev.properties (desarrollo)

Activa vía Maven:

mvn verify -Dprofile=ci

Variables de Entorno

Sobrescribe propiedades usando variables de entorno:

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

Referencia de Constantes

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

ConstanteClave de Propiedad
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

Siguientes Pasos

Recursos Adicionales