¿Qué es Cucumber? ¿Cómo se usa? Ejemplos de uso – Tutorial
Cucumber es una herramienta de desarrollo de software que soporta el Desarrollo Guiado por Comportamiento (Behavior-Driven Development, BDD), utilizada para desarrollar casos de prueba para la funcionalidad del comportamiento del software. Es una herramienta de pruebas automatizadas que facilita la escritura de pruebas en un lenguaje claro y sencillo, permitiendo que personas sin conocimiento técnico puedan comprenderlas
1. Introducción al Desarrollo Guiado por Comportamiento (BDD) y Cucumber
Conceptos Básicos de BDD
El Desarrollo Guiado por Comportamiento, o BDD, es una metodología de desarrollo de software que fomenta la colaboración entre los miembros del equipo de desarrollo, los interesados y los profesionales de control de calidad. Su propósito es mejorar la comunicación entre estos grupos para garantizar que todos tengan una comprensión clara de los requisitos del proyecto. BDD se centra en el uso de ejemplos simples para describir el comportamiento del software, en lugar de las especificaciones técnicas detalladas.
Un aspecto clave de BDD es la especificación de software mediante ejemplos conversacionales, conocidos como «escenarios». Estos escenarios describen cómo debería comportarse el software desde la perspectiva del usuario final y se escriben en un lenguaje natural. Por ejemplo:
Característica: Devolución de los productos defectuosos Como cliente de una tienda online Quiero poder devolver productos defectuosos Para obtener un reembolso o un producto de reemplazo Escenario: Devolver un producto defectuoso dentro del período de garantía Dado que he comprado un producto hace menos de 30 días Y el producto no funciona correctamente Cuando solicito una devolución Entonces debo recibir un reembolso
Este escenario es un ejemplo de cómo se describe una característica en BDD, utilizando el lenguaje Gherkin que Cucumber interpreta para realizar pruebas automáticas.
¿Qué es Cucumber?
Cucumber es una herramienta de automatización de pruebas diseñada para soportar BDD. Permite a los equipos definir el comportamiento deseado del software en archivos de texto plano utilizando Gherkin, que luego se pueden utilizar para producir informes de prueba automáticos.
La clave de Cucumber es que permite escribir pruebas de comportamiento en un lenguaje claro y accesible para todos los miembros del equipo, incluidos aquellos sin antecedentes técnicos. Por ejemplo, usando el escenario anterior, Cucumber permitirá que los desarrolladores y testers colaboren para definir cómo debería implementarse y probarse la funcionalidad de devolución de productos.
Cucumber en la Práctica
Para comenzar a utilizar Cucumber, los equipos crean archivos de características que contienen escenarios escritos en Gherkin. Estos archivos son una fuente de verdad tanto para los requisitos como para las pruebas de aceptación. Cucumber luego utiliza estos archivos para probar que el software se comporta como se espera.
En la práctica, un equipo podría seguir estos pasos:
Definir Características y Escenarios: Reunir a desarrolladores, testers y stakeholders para discutir las características y escribir escenarios juntos.
Escribir Definiciones de Pasos: Los desarrolladores y testers escriben código que define lo que cada paso del escenario debe hacer durante la prueba.
Ejecutar Pruebas: Cucumber se ejecuta, pasando por cada escenario y utilizando las definiciones de pasos para probar si el software se comporta según lo descrito.
Revisar Resultados: Después de ejecutar las pruebas, Cucumber genera informes que muestran si los escenarios han pasado o fallado, lo que proporciona retroalimentación inmediata sobre la calidad del software.
Con Cucumber y BDD, el equipo de desarrollo tiene una guía clara y compartida de lo que necesita ser construido, y los testers tienen una base clara para sus pruebas. Juntos, garantizan que el producto final cumpla con las expectativas del usuario y los objetivos comerciales.
2. Instalación y Configuración de Cucumber
Requisitos Previos
Antes de instalar Cucumber, es fundamental asegurarse de que tienes el entorno de programación adecuado configurado en tu sistema. Dependiendo del lenguaje con el que trabajarás, necesitarás tener instalado Ruby, Java, .NET, JavaScript u otros lenguajes soportados por Cucumber. Por ejemplo, si decides trabajar con Java, necesitarás tener instalado Java Development Kit (JDK) y una herramienta de construcción como Maven o Gradle.
Instalación de Cucumber
Una vez que el entorno está listo, puedes proceder con la instalación de Cucumber. Vamos a ver cómo instalar Cucumber para Ruby y Java, que son dos de los entornos más comunes:
Para Ruby:
Instala Ruby en tu sistema si aún no lo has hecho. Puedes descargarlo desde el sitio oficial de Ruby o usar un administrador de versiones como RVM o rbenv.
Una vez que Ruby está instalado, abre una terminal y escribe el siguiente comando para instalar la gema de Cucumber:
gem install cucumber
3. Verifica la instalación ejecutando cucumber --version
en la terminal. Deberías ver la versión instalada de Cucumber si todo ha ido bien.
Para Java:
Asegúrate de tener instalado JDK y una herramienta de construcción como Maven.
Crea un nuevo proyecto Maven y agrega las siguientes dependencias en tu archivo
pom.xml
:
io.cucumber cucumber-java LA_ULTIMA_VERSION io.cucumber cucumber-junit LA_ULTIMA_VERSION test
Asegúrate de reemplazar LA_ULTIMA_VERSION
con la versión actual de Cucumber.
3. Después de agregar las dependencias, puedes ejecutar Maven para descargar e instalar Cucumber y sus dependencias en tu proyecto.
Configuración del Entorno de Desarrollo
Una vez que Cucumber está instalado, es hora de configurar tu entorno de desarrollo. Si utilizas un IDE como IntelliJ IDEA o Eclipse, hay plugins disponibles que facilitan la ejecución y el manejo de las pruebas de Cucumber. Por ejemplo, para IntelliJ IDEA, puedes instalar el plugin de Cucumber for Java directamente desde el mercado de plugins del IDE.
Estructura de Directorios
Cucumber utiliza una estructura de directorios específica. Por convención, los archivos de características se colocan en un directorio llamado features
. Dentro de este directorio, creas un archivo con la extensión .feature
para cada característica que quieras probar. Además, necesitarás un subdirectorio step_definitions
donde se almacenarán los archivos que contienen el código que ejecuta cada paso definido en tus archivos de características.
Primeros Pasos con Cucumber
Para verificar que todo está configurado correctamente, puedes crear un archivo de prueba de características simple:
# features/prueba.feature Característica: Prueba simple de Cucumber Para verificar que Cucumber está funcionando Quiero que una prueba simple pase Escenario: Ejecutar un escenario simple Dado que tengo Cucumber instalado Cuando ejecuto una prueba simple Entonces la prueba debería pasar
Luego, escribe las definiciones de los pasos en un archivo Ruby o Java (dependiendo del entorno que estés utilizando). Por último, ejecuta Cucumber desde la terminal o a través de tu IDE. Si ves un mensaje indicando que tu escenario ha pasado, ¡tu entorno de Cucumber está listo para usar!
Con tu entorno configurado y listo para ejecutar pruebas, estás en el camino correcto para comenzar a escribir casos de prueba más complejos y aprovechar todo el poder de Cucumber en tus proyectos de desarrollo.
3. Escribir Casos de Prueba con Cucumber
Fundamentos de Gherkin
Gherkin es el lenguaje específico de dominio utilizado por Cucumber para escribir casos de prueba. Es un lenguaje descriptivo y de alto nivel que permite definir el comportamiento del software en términos legibles y comprensibles. Los archivos de características de Gherkin (.feature) constan de una serie de escenarios, cada uno representando una situación específica o un caso de prueba.
Estructura de un Archivo de Características
Un archivo .feature
típico tiene la siguiente estructura:
- Feature: La descripción de la característica que se va a probar.
- Background: (Opcional) Una sección que contiene pasos que se ejecutan antes de cada escenario.
- Scenario: Define un escenario de prueba específico.
- Given, When, Then, And, But: Palabras clave que definen los pasos de un escenario.
Por ejemplo:
# features/ejemplo_login.feature Feature: Inicio de sesión en la aplicación As a registered user I want to log in with my credentials So that I can access my personal dashboard Scenario: Successful login with valid credentials Given I am on the login page When I enter valid credentials And I click on the login button Then I should be redirected to my personal dashboard
Definiendo Escenarios
Un escenario es una secuencia de pasos que describe una función desde su inicio hasta su conclusión. Los escenarios deben ser independientes y poder ejecutarse en cualquier orden. Cada paso en un escenario se escribe utilizando las palabras clave Given
, When
, Then
, And
, y But
.
- Given: Se utiliza para describir el estado inicial del sistema.
- When: Describe la acción que desencadena el evento.
- Then: Define el resultado esperado o el estado del sistema después de la acción.
- And, But: Se utilizan para agregar condiciones o acciones adicionales a los pasos
Given
,When
, oThen
.
Definiciones de Pasos
Después de escribir los escenarios, necesitarás definir los pasos en tu lenguaje de programación preferido. Las definiciones de pasos son bloques de código que le dicen a Cucumber qué hacer cuando se encuentra con un paso en un archivo .feature
.
Por ejemplo, para el escenario anterior, podrías tener definiciones de pasos en Ruby como las siguientes:
# features/step_definitions/login_steps.rb Given('I am on the login page') do visit('/login') end When('I enter valid credentials') do fill_in('Username', with: 'user@example.com') fill_in('Password', with: 'securepassword') end When('I click on the login button') do click_button('Login') end Then('I should be redirected to my personal dashboard') do expect(page).to have_content('Your Dashboard') end
Cada definición de paso corresponde a un paso en el archivo .feature
y utiliza expresiones regulares o strings coincidentes para enlazar el texto del paso con el código que debe ejecutar.
Buenas Prácticas
Cuando escribes casos de prueba con Cucumber, es importante seguir algunas buenas prácticas:
- Escribe escenarios claros y concisos: Los escenarios deben ser comprensibles para todos los miembros del equipo.
- Mantén los escenarios independientes: Cada escenario debe poder ejecutarse por sí solo.
- Reutiliza pasos: Define pasos comunes que puedan ser reutilizados en varios escenarios.
- Evita detalles de implementación: Concéntrate en el comportamiento en lugar de cómo se realiza la funcionalidad.
Al seguir estos principios, te aseguras de que tus archivos .feature
sean una herramienta valiosa tanto para la definición de comportamientos como para la documentación del proyecto. Con casos de prueba bien escritos, tu equipo puede continuar desarrollando y manteniendo una base de código saludable con confianza en que el comportamiento del software cumple con las expectativas del usuario final.
4. Ejecución de Pruebas y Automatización con Cucumber
Ejecución de Pruebas
Una vez que has definido tus archivos de características y las definiciones de los pasos asociados, el siguiente paso es ejecutar las pruebas para ver si el comportamiento del software coincide con lo que se ha descrito en tus escenarios de Gherkin.
Para ejecutar las pruebas con Cucumber, generalmente se utiliza la línea de comandos o una tarea definida en tu herramienta de construcción (como Maven, Gradle o Rake). Al ejecutar Cucumber, la herramienta buscará en el directorio features/
todos los archivos de características y ejecutará los escenarios uno por uno.
Por ejemplo, en la línea de comandos, podrías simplemente navegar a la raíz de tu proyecto y ejecutar:
cucumber features/ejemplo_login.feature
Esto iniciará la ejecución de los escenarios definidos en ejemplo_login.feature
. Cucumber utiliza las definiciones de los pasos para ejecutar el código asociado con cada paso del escenario.
Automatización de Pruebas
La automatización de pruebas con Cucumber puede integrarse en tu proceso de integración continua (CI). Herramientas como Jenkins, CircleCI, o Travis CI pueden configurarse para ejecutar tus pruebas de Cucumber cada vez que se hace push al repositorio de código o se fusiona una pull request.
Ejemplo Detallado
Vamos a continuar con el ejemplo del apartado anterior, donde teníamos un escenario de prueba para el inicio de sesión en una aplicación.
Archivo de Características (ejemplo_login.feature)
# features/ejemplo_login.feature Feature: Inicio de sesión en la aplicación As a registered user I want to log in with my credentials So that I can access my personal dashboard Scenario: Successful login with valid credentials Given I am on the login page When I enter valid credentials And I click on the login button Then I should be redirected to my personal dashboard
Definiciones de los Pasos (login_steps.rb)
# features/step_definitions/login_steps.rb Given('I am on the login page') do visit('/login') end When('I enter valid credentials') do fill_in('Username', with: 'user@example.com') fill_in('Password', with: 'securepassword') end When('I click on the login button') do click_button('Login') end Then('I should be redirected to my personal dashboard') do expect(page).to have_content('Your Dashboard') end
Ejecución y Resultados
Al ejecutar el comando cucumber
, se inicia la prueba y Cucumber procesa el archivo ejemplo_login.feature
. Si todos los pasos se ejecutan correctamente y las expectativas se cumplen, verás una salida similar a la siguiente en la terminal:
Feature: Inicio de sesión en la aplicación Scenario: Successful login with valid credentials Given I am on the login page When I enter valid credentials And I click on the login button Then I should be redirected to my personal dashboard 1 scenario (1 passed) 4 steps (4 passed) 0m0.123s
Esto indica que el escenario se ejecutó con éxito y que el comportamiento definido en tus pruebas coincide con el comportamiento actual del software.
Conclusión y Mejores Prácticas
La ejecución de pruebas con Cucumber es un proceso poderoso y flexible. Para aprovechar al máximo Cucumber y BDD, considera las siguientes mejores prácticas:
- Automatiza la ejecución de pruebas: Integra Cucumber en tu pipeline de CI/CD para asegurarte de que las pruebas se ejecuten automáticamente y con frecuencia.
- Revisa los informes de pruebas: Utiliza los informes generados por Cucumber para identificar problemas y mejorar la calidad del código.
- Mantén las definiciones de pasos limpias y reutilizables: Refactoriza las definiciones de pasos para que sean reutilizables en varios escenarios, lo que facilita el mantenimiento y mejora la claridad de tus pruebas.
- Colabora con tu equipo: Comparte los resultados de las pruebas con todos los miembros del equipo y utiliza los comentarios para mejorar continuamente tus pruebas y el código subyacente.
Al seguir estas prácticas, Cucumber se convierte en una herramienta indispensable para asegurar que tu aplicación se comporte exactamente como se espera, cada vez que se introduce un cambio en el código.
Bibliografía para profundizar en Cucumber
Para profundizar en el uso de Cucumber y en el Desarrollo Guiado por Comportamiento (BDD), puedes consultar los siguientes recursos que proporcionan información detallada y ejemplos prácticos:
«The Cucumber Book: Behaviour-Driven Development for Testers and Developers» por Matt Wynne y Aslak Hellesøy.
- Este libro es una guía completa para aprender Cucumber y BDD. Ofrece explicaciones detalladas, ejemplos del mundo real y consejos prácticos para aplicar BDD en tus proyectos.
«Cucumber & Cheese: A Tester’s Workshop» por Jeff Morgan.
- Un libro que se enfoca en la aplicación práctica de Cucumber en pruebas automatizadas, mostrando cómo escribir mejores escenarios y definiciones de pasos.
«BDD in Action: Behavior-Driven Development for the whole software lifecycle» por John Ferguson Smart.
- Proporciona una visión general de BDD y cómo se puede aplicar a lo largo del ciclo de vida del desarrollo de software, incluyendo integración y pruebas.
Documentación Oficial de Cucumber
- La documentación oficial de Cucumber es siempre un recurso actualizado para obtener información sobre las últimas características, mejores prácticas y cómo empezar con Cucumber en diferentes lenguajes de programación.
¿Está disponible para php?