¿Cómo ejecutar características de Cucumber múltiples veces con diferentes códigos bajo prueba?
La versión resumida:
¿Cómo hago el @RunWith(Parameterized::class)
de JUnit con las características de Cucumber?
Tengo archivos de características que me gustan. Quiero ejecutar exactamente los mismos rasgos varias veces, pero cambiar “el entorno” para que el código @Before
en mis step-defs sea ligeramente diferente. Tengo algunas implementaciones diferentes de algún código de prueba y quiero asegurarme de que todos funcionen. Así que tiene que ser parte del pipeline de CI. No una cosa de cmd-line manual.
Lo que quiero cambiar entre ejecuciones no tiene ningún significado semántico para los archivos de escenarios/rasgos, por lo que preferiría no alterarlos radicalmente ni duplicarlos.
Estoy usando el stock java/kotlin y gradle junit. No hay spring, no hay webUI.
Configuré múltiples ganchos junit que apuntan a los mismos rasgos, lo que funciona para ejecutar los rasgos varias veces. Pero no puedo averiguar cómo obtener información desde el gancho hasta los step-defs.
— Actualización —
Aquí está el código que tengo para enchufar las pruebas de pepino en junit:
@RunWith(Cucumber::class)
@CucumberOptions(
features = [“src/test/resources/hellocucumber/”],
)
class FirstRun
@RunWith(Cucumber::class)
@CucumberOptions(
features = [“src/test/resources/hellocucumber/”],
)
class SecondRun
Esto realmente ejecuta las pruebas dos veces, que es lo que quiero.
Pero en mis step-defs, la sección @Before
donde configuro el código de prueba, ¿cómo puedo saber si es la primera ejecución o la segunda? No puedo encontrar una forma de obtener ningún dato de estos stubs a los step-defs.
¿Tal vez no es la forma de hacer esto?
davy.ai
Para utilizar
@RunWith(Parameterized::class)
con características de Cucumber, puedes crear un corredor JUnit personalizado que extiendaParameterized
y anule el métodoparameters()
para devolver una colección de objetosScenarioOutlineWrapper
. CadaScenarioOutlineWrapper
representará una sola ejecución del archivo de características con diferentes valores de parámetros.La clase
ScenarioOutlineWrapper
puede contener campos que representen los parámetros que se van a variar entre ejecuciones, y estos campos se pueden definir en el constructor de la clase.En el método
@Before
de tus definiciones de pasos, puedes acceder a los campos del objetoScenarioOutlineWrapper
que corresponde a la ejecución de prueba actual. Puedes usar estos campos para configurar adecuadamente tu código de prueba.Aquí hay un ejemplo de una clase de corredor personalizada:
Y la clase
CustomParameterizedCucumber
:En este ejemplo, la clase
MyTest
está parametrizada con el entorno yCustomScenarioOutlineRunner
envuelve cada esquema de escenario en un objetoScenarioOutlineWrapper
que contiene el entorno que se va a utilizar en esa ejecución de prueba.En el método
getDescription()
, agregamos el objetoScenarioOutlineWrapper
a la descripción de la prueba para que podamos ver fácilmente qué entorno se está utilizando en cada ejecución.En el método
runChild()
, llamamos asetUp()
ytearDown()
en el objetoScenarioOutlineWrapper
para configurar y limpiar después de cada ejecución de prueba.Con esta configuración, puedes ejecutar la prueba usando
gradle test
, y automáticamente ejecutará el archivo de características varias veces con diferentes parámetros.</object[]></object[]></object[]></object[]>