El blog de QA en español de Redsauce

Las mejores prácticas en Gherkin Cucumber

Artículo de Kenan Rhoton

Las mejores prácticas en Gherkin Cucumber

¿Cuáles son las mejores prácticas con Gherkin Cucumber?


A lo largo de los años de trabajo con Cucumber (y Gherkin), haciendo qa testing tenemos varias pautas que nos ayudan a crear mejores escenarios.


A continuación enumeramos las que nos parecen más útiles y que aplicamos a cualquier proyecto que comenzamos con Gherkin Cucumber.

Mejores prácticas en Gherkin Cucumber 1: Escribir características declarativas

Los escenarios deben ser escritos tal y como un usuario los describiría.

Ten cuidado con los escenarios que sólo describen cómo hacer clic en los enlaces y rellenar los campos del formulario, o con los pasos que contienen código o selectores CSS.

Gherkin no es más que una variante de la programación, pero no consiste en una descripción de características de tu software.


Las características declarativas han de ser descriptivas, concisas y contienen pasos altamente mantenibles.

    # Mal: esto es sólo programación

Given the user is on "http://www.mypage.com/home"
When the user clicks on the first news item
Then the browser shows the news item view page


# Bien: claro, legible y relacionable

Given the user is on the Home page
When the user reads the news
Then the user can see the article


# Feo: A pesar de ser legible, no está claro lo que estamos probando

Given the user wants to see news
Then the user sees news

Mejores prácticas en Gherkin Cucumber 2: Incluir una narrativa

Las narrativas describen en una frase lo que hace una funcionalidad.

Un ejemplo típico contiene el rol que necesita la funcionalidad, la función propiamente dicha y el beneficio que obtiene el usuario.

Es importante que se vea por qué se implementa la función en primer lugar cuál es la funcionalidad.

También dan una breve visión general de la funcionalidad para que otros tengan una comprensión aproximada sin necesidad de leer los escenarios.

# Mal: ¿Qué estamos probando aquí?

Feature: Reservations

Scenario: User makes a normal reservation


# Bien: Tanto los motivos como lo que se está probando aparecen claramente

Feature: Perform a reservation

As a registered user
To ensure the restaurant has a table available
The user makes a reservation

Scenario: The user successfully makes a reservation


# Feo: Esto es demasiado largo, nadie lo leerá

Feature: The user intends to make a reservation and does so

As a user that has an account on the site
Since they are having an event, be it a bachelor party or birthday or even just a romantic dinner for two, and they want to make sure that they will have a place available to them for this event
The user logs into the page and chooses a restaurant to his liking to make a reservation for said event

Mejores prácticas en Gherkin Cucumber 3: Evitar pasos conjuntivos

Cuando encuentres un paso de Cucumber que contenga dos acciones conjuntadas con un "y", normalmente deberías al menos considerar dividirlo en dos pasos.

Si te ciñes a una acción por paso, tus pasos serán más modulares y reutilizables.

Sin embargo, esta no es una regla general. Puede haber razones para realizar pasos conjuntos. Sin embargo, la mayoría de las veces es mejor evitarlos.

    # Mal: Este paso contiene dos estados diferentes

Given the user is logged in with a product in their cart


# Bueno: Cada paso es una declaración sobre el estado

Given the user is logged in
And the user has a product in their cart


# Feo: Estos pasos pueden ser agrupados

Given the user is on the site
And the user has an account
And the user logs into their account
And the user wants to buy a product
And the user adds it to their cart

Mejores prácticas en Gherkin Cucumber 4: Utilizar los Backgrounds con prudencia

Si utilizas los mismos pasos al principio de todos los escenarios de una función, póngalos en el background de la funcionalidad.

Los pasos de background se ejecutan antes de cada escenario. Pero si añadimos demasiados pasos al background, tus escenarios pueden volverse difíciles de entender.

# Mal: ¡Nos estamos repitiendo!

As a cat lover
The user would like to enjoy pictures of cats
So they go to their gallery

Scenario: The user views pictures of cats
Given the user is logged in
When the user goes to the "Cats" gallery
Then the user can see pictures of cats

Scenario: The user likes a picture of a cat
Given the user is logged in
When the user goes to the "Cats" gallery
And the user likes a picture
Then the user can see that picture in their "Liked" gallery

# Bien: No nos repetimos :)

As a cat lover
The user would like to enjoy pictures of cats
So they go to their gallery

Background:
Given the user is logged in
And the user goes to the "Cats" gallery

Scenario: The user views pictures of cats
Then the user can see pictures of cats

Scenario: The user likes a picture of a cat
When the user likes a picture
Then the user can see that picture in their "Liked" gallery

Mejores prácticas en Gherkin Cucumber 5: Escenarios de un uso único

Los escenarios deben ser escritos con un caso de uso único en mente.

Esto ayuda a localizar los errores y encontrar exactamente qué casos fallan.

También ayuda a entender exactamente qué se está probando y por qué.

# Mal: el escenario cubre demasiadas cosas

Scenario: Cart
Given the user is in the shopping page
When the user adds potatoes to the cart
Then the cart contains potatoes
When the user clears the cart
Then the cart is empty
When the user adds potatoes to the cart
And the user clicks on checkout
Then the user is asked for the payment method

# Bien: un escenario por caso de uso
Background:
Given the user is in the shopping page
And the user adds potatoes to the cart

Scenario: Potatoes added to cart
Then the cart contains potatoes

Scenario: Cart cleared
When the user clears the cart
Then the cart is empty

Scenario: Checkout
When the user clicks on checkout
Then the user is asked for the payment method

Mejores prácticas en Gherkin Cucumber 6: Sigue el patrón Estado-Acción-Estado

Los escenarios deben declarar un estado inicial (Given), realizar algunas acciones (When) y asegurarse de que se alcanza el estado final esperado (Then).

Esto ayudará a asegurar que los escenarios sean legibles y útiles. Descubre cuál es la razón de llamarlo Given When Then

# Mal: demasiado confuso para leer
Scenario: User successfully logs in
Given the user is in the login page
When the user authenticates correctly
Then the user should see the homepage
When the user clicks on his profile
Then the user should see his personal information

# Bien: hacer que el paso de autenticación compruebe su propio éxito lo hace más legible
Scenario: User successfully logs in
Given the user is in the login page
When the user authenticates correctly
And the user clicks on his profile
Then the user should see his personal information

Mejores prácticas en Gherkin Cucumber 7: No seas demasiado extenso

Una buena regla general es intentar mantener los escenarios dentro de 5 o menos pasos.

En algunos casos pueden ser necesarios más, pero sólo en muy pocas ocasiones deberíamos ir más allá de 7.

# Mal: ¡demasiado largo!
Scenario: User successfully registers a new account
Given the user is on the login page
When the user goes to the registration form
And the user fills in his name
And the user fills in his email address
And the user fills in a sufficient quality password
And the user selects a home country "Spain"
And the user submits the registration form
Then the user is successfully registered on the platform

# Bien: ser conciso es una virtud
Scenario: User successfully registers a new account
Given the user is on the login page
When the user correctly fills in the registration form
Then the user is successfully registered on the platform

Mejores prácticas en Gherkin Cucumber 8: Pasos

Por último, un par de consideraciones que siempre hay que tener en cuenta a la hora de programar los propios pasos:

  • Hacer pasos autocontenidos: Cada paso debe validar el estado inicial antes de la acción y el estado final después de la misma. Esto da lugar a mensajes más significativos, ya que de lo contrario un problema en la acción de un paso podría dar el paso por válido y devolver el fallo en el paso siguiente.

  • Reutilizar funciones: En Cucumber puedes llamar a pasos dentro de otros pasos. No hagas esto. En su lugar crea una función que pueda ser llamada desde múltiples pasos. Deberías intentar reutilizar funciones tan a menudo como sea posible. Esto mejorará la mantenibilidad de tu aplicación: si necesitas cambiar un determinado comportamiento, sólo tienes que cambiar una única función.

Conoce a Redsauce y descubre estos consejos y muchos más en nuestro ebook gratuito.


image

Sobre nosotros

Has llegado al blog de Redsauce, un equipo de expertos en QA y desarrollo de software. Aquí hablaremos sobre testing ágil, automatización, programación, ciberseguridad… ¡Bienvenido!