Características del pepino: una descripción general
Publicado: 2022-04-20Introducción
Gherkin es un lenguaje que todavía se usa en muchos marcos de automatización de pruebas. A veces es porque el cliente nos exige que lo usemos, a veces es porque el equipo así lo decide.
Para ser honesto, no fue amor a primera vista para mí. Personalmente, tengo un viaje bastante largo con Gherkin, desde que me gusta al principio, hasta que detesto el idioma por un tiempo y luego me vuelve a gustar. En este artículo presentaré las características más importantes de Cucumber junto con la implementación de Java.
Aquí están todas las características de Cucumber cubiertas en este artículo:
Rasgo | Descripción |
---|---|
Guión | Escenario sencillo |
Esquema del escenario | Requiere que el usuario proporcione datos de prueba en la sección "Ejemplos" |
Tablas de datos | Requiere que el usuario proporcione datos de prueba para el paso de prueba |
Contexto del escenario | Compartir valores entre pasos de prueba |
Tipos de datos de pepino | Tipos de datos manejados por pepino |
Expresión regular de pepino | Uso de expresiones regulares en escenarios de pepino |
Ganchos de pepino | Ejecuta código adicional en escenarios de prueba |
archivo de características
En primer lugar, ¿qué es un archivo de características? En el mundo técnico, se creó un enfoque no técnico para permitir que personas no técnicas cooperen con el equipo durante el desarrollo de una aplicación. El lenguaje Gherkin se creó como una capa adicional en el enfoque BDD. Las pruebas de Gherkin se encuentran en los llamados archivos de características que se pegan con el código (Java, Kotlin, C#, etc.). Por lo general, Gherkin es muy fácil de usar y requiere un conocimiento mínimo de programación, pero hay funciones que requieren algo de codificación.
Comencemos con algo fácil.
Guión
Este es el ejemplo más básico y fácil de usar de la prueba Cucumber:
Característica: Escenario Antecedentes: antes de los escenarios de prueba Dado que ejecuto antes del paso @Prueba Escenario: Escenario Dado que uso el paso parametrizado del "Escenario 1"
Bloque de código 1. Escenario
El bloque de código 1. contiene algunas cosas que deben explicarse:
- Característica : el título del archivo de característica
- Fondo : la palabra clave que permite al usuario ejecutar pasos de prueba antes de cada escenario de prueba definido en el archivo de características
- @Test : etiqueta que le dice al marco de prueba qué escenario de prueba debe ejecutarse. “Prueba” es definida por el usuario. Podemos usar, por ejemplo, "@SmokeTest"
- Escenario : nombre del escenario de prueba
Las pruebas de pepinillo utilizan las palabras clave [Dado, Cuándo, Entonces, Pero] antes de cada paso de la prueba. En nuestro único paso de prueba, excepto el paso de fondo, usamos un parámetro en el que pasamos el valor "Escenario 1".
Ahora, veamos cómo se ve el código Java pegado:
@Given("Ejecuto antes del paso") public void iExecuteBeforeStep() { //alguna implementación } @Given("Utilizo el paso parametrizado de {cadena}") public void iUseParametrizedStepOf(String p) { //alguna implementación }
Bloque de código 2. Implementación de código Java de Scenario
Esquema del escenario
Hagamos algo más complejo:
Característica: esquema del escenario @Prueba Esquema del escenario: Esquema del escenario Dado que ejecuto el paso con "<parámetro1>" y "<parámetro2>" Ejemplos: | parámetro1 | parámetro2 | | parámetro1a | parámetro2a | | parámetro1b | parámetro2b |
Bloque de código 3. Esquema del escenario
Esta vez usaremos el esquema de escenario que nos permite repetir escenarios de prueba con diferentes configuraciones de datos de prueba. El bloque de código 3 contiene algunas cosas que deben explicarse:
- Ejemplos : la matriz de datos de prueba que se utilizará en los escenarios de prueba. La primera fila es un encabezado con nombres de parámetros.
Y la implementación de Java:
@Given("Ejecuto el paso con {cadena} y {cadena}") vacío público iRunStepWithAnd(String p1, String p2) { //alguna implementación }
Bloque de código 4. Implementación en Java del esquema de escenario
Tabla de datos
El esquema del escenario es muy útil, pero ¿qué pasa si no queremos repetir todo el escenario de prueba sino solo un paso de prueba? Gherkin tiene una forma de hacerlo y se llama "Tabla de datos".
Característica: tabla de datos @Prueba Escenario: Escenario de tabla de datos Dado que verifico que la columna contiene el valor esperado | nombreColumna | valoresperado | | algúnNombreDeColumna | algún valor esperado |
Bloque de código 5. Tabla de datos
El Escenario con Tabla de Datos no difiere mucho del Esquema del Escenario. Lo único es que no ponemos la palabra clave “Ejemplos” antes de la tabla.
La implementación de Java parece un poco más compleja que en los casos anteriores:
@Given("Verifico que la columna contiene el valor esperado") public void iVerifyColumnValuesInTableUsingQueryFromFileOnSchema(DataTable dataTable) { List<Map<String, String>> data = dataTable.asMaps(); for (Map<String, String> formulario: datos) { String nombreColumna = formulario.get("NombreColumna"); String resultado esperado = form.get("valoresperado"); //alguna implementación } } }
Bloque de código 6. Implementación Java de tabla de datos

Para acceder a los datos de una tabla de datos, creamos una variable especial dataTable de tipo "DataTable". Todos los datos se almacenarán en la variable Lista.
Contexto del escenario
Usando el contexto del escenario podemos compartir datos entre pasos. Supongamos que tenemos un escenario de dos pasos en el que queremos pasar "datos" de valor del paso 1 al paso 2 (Bloque de código 7).
@Prueba Escenario: Contexto del escenario Dado que establecí el valor de contexto del escenario "datos" Dado que uso el valor de contexto del escenario
Bloque de código 7. Contexto del escenario
En primer lugar, necesitamos crear una clase especial llamada ScenarioContext con características de contexto de escenario para configurar y obtener datos (Bloque de código 8). Nuestro contexto de escenario es un HashMap con un par clave-valor. Estaremos identificando valores por su clave.
- escenarioContext() : HashMap del par clave-valor
- setContext() : método de clave-valor para almacenar datos de contexto de escenario
- getContext() : método para obtener datos proporcionando clave
contexto de escenario de clase pública { privado Map<String, Object> escenarioContexto; escenario públicoContext(){ escenarioContexto = new HashMap<>(); } public void setContext (clave de contexto, valor del objeto) { escenarioContexto.put(clave.toString(), valor); } objeto público getContext (clave de contexto) { return escenarioContext.get(key.toString()); } } Contexto de enumeración pública { IDENTIFICACIÓN; }
Bloque de código 8. Implementación Java de la clase Scenario Context
Teniendo esto podemos hacer uso de los métodos implementados. En el paso 1, luego establecemos el valor en el contexto del escenario y en el paso 2 obtenemos el valor (Bloque de código 9).
ScenarioContext escenarioContext = new ScenarioContext(); @Given("Configuré el valor de contexto del escenario {cadena}") public void iSetScenarioContextValue(valor de cadena) { escenarioContext.setContext(Context.ID, valor); } @Given("Uso el valor de contexto del escenario") vacío público iUseScenarioContextValue() { String sharedValue = escenarioContext.getContext(Context.ID).toString(); }
Bloque de código 9. Pasos del contexto del escenario
Tipos de datos de pepino
Cucumber maneja un número limitado de tipos de datos. Podemos definir cadenas, enteros y valores flotantes, pero en el caso de valores booleanos, necesitamos codificar algunas soluciones.
@Prueba Escenario: Escenario con variables Dado que uso string "string", int 1, float 1.1 y boolean "false"
Bloque de código 10. Tipos de datos de pepino
El código Java se vería así:
@Given("Uso string {string}, int {int}, float {float} y boolean {string}") public void iUseStringIntFloatAndBoolean(String var1, int var2, double var3, String var4) { booleano f = Boolean.valueOf(var4); // algún código }
Bloque de código 11. Implementación Java de tipos de datos de pepino
Expresión regular de pepino
Esta es otra característica de uso frecuente. El bloque de código 12 muestra un escenario de dos pasos que difieren solo en el uso de diferentes valores de variables (var1 y var2). De hecho, esto es solo un paso, y en el código Java (Bloque de código 13) definimos solo un método pero con expresiones regulares y un parámetro var.
@Prueba Escenario: Escenario de expresiones regulares Dado que uso la variable var1 Dado que uso la variable var2
Bloque de código 12. Expresión regular en Pepino
@Given("^Uso variable (.*)") public void examTimeTableInSummerSeason(String var) { si (var.equals("var1")){ // algún código } else if(var.equals("var2")){ // algún código } }
Bloque de código 13. Implementación en Java de la expresión regular Cucumber
Ganchos de pepino
Por último, pero no menos importante: ganchos de pepino.
El bloque de código 14 presenta los 4 ganchos más importantes:
- @Before : ejecuta el código antes de cada escenario de prueba
- @After : ejecuta el código después de cada escenario de prueba
- @BeforeStep : ejecuta código antes de cada paso de prueba
- @AfterStep : ejecuta el código después de cada paso de prueba
@Antes public void beforeScenario() { // algún código } @Después public void afterScenario() { // algún código } @AntesdelPaso vacío público antes del paso () { // algún código } @después del paso public void afterStep() { // algún código }
Bloque de código 14. Ganchos de pepino
Resumen
Espero haberte convencido de usar Gherkin en tus pruebas. Estas pocas características harán que sus pruebas sean más legibles y fáciles de entender por personas sin conocimientos técnicos. Además, para los nuevos miembros será más fácil comprender la lógica empresarial y reducir el tiempo de incorporación.