Si has mirado ofertas de QA con algo de automatización, seguro que te has cruzado con "BDD" en los requisitos. Y si has buscado qué es, seguro que te has encontrado tres palabras mezcladas sin que nadie te explique bien la diferencia: BDD, Gherkin y Cucumber.
No son sinónimos. BDD es una práctica de trabajo, Gherkin es un idioma para escribir escenarios y Cucumber es solo una de las herramientas que ejecuta ese idioma como test automatizado. Confundir los tres es el motivo por el que tanta gente cree que "hacer BDD" es simplemente escribir "Given, When, Then" delante de un test que de todas formas ya iban a escribir.
Aquí vas a ver la diferencia real entre los tres, cómo se escribe un escenario en Gherkin de verdad, cómo se conecta con el código que lo ejecuta, y cuándo esta práctica compensa el esfuerzo y cuándo es puro teatro documental.
Tres palabras, tres cosas distintas
Antes de escribir una sola línea de Gherkin conviene separar los tres conceptos, porque cada uno resuelve un problema distinto.
Negocio, desarrollo y QA acuerdan el comportamiento esperado antes de programarlo, en un lenguaje que los tres entienden.
El idioma estructurado que convierte ese acuerdo en un texto legible por personas y, a la vez, interpretable por una herramienta.
Uno de los frameworks que lee un archivo Gherkin y ejecuta el código conectado a cada línea. No es el único: behave y pytest-bdd hacen lo mismo en Python.
El error habitual, y honestamente el más comprensible, es usar Gherkin sin hacer BDD de verdad: un solo QA escribe los escenarios, nadie de negocio los revisa nunca, y el archivo .feature termina siendo solo una forma más rara de escribir el mismo test que ya se iba a automatizar. Eso no es malo en sí, pero tampoco es BDD: es sintaxis Gherkin sobre un test tradicional.
Cómo se escribe un escenario en Gherkin
Un archivo Gherkin (extensión .feature) describe un comportamiento en tres bloques: el contexto de partida (Given), la acción que lo dispara (When) y el resultado esperado (Then). And y But encadenan pasos del mismo tipo sin repetir la palabra clave.
Feature: Inicio de sesión
Como usuario registrado
quiero iniciar sesión con mis credenciales
para acceder a mi cuenta
Scenario: Login con credenciales válidas
Given que estoy en la página de login
When introduzco un email y una contraseña válidos
And pulso el botón "Entrar"
Then accedo a mi panel de usuarioCada línea del Scenario es un paso. Lo importante no es la palabra clave que lo empieza, sino el orden lógico: primero el contexto, luego la acción, luego la comprobación. Gherkin ni siquiera obliga a usar el verbo correcto en cada paso, es solo una convención para que el escenario se lea como una frase natural.
De Gherkin a test automatizado: los step definitions
Un archivo .feature por sí solo no ejecuta nada. Necesita un step definition: una función de código conectada a cada línea del escenario mediante un texto que hace de patrón. Con pytest-bdd, la librería que conecta Gherkin con pytest en Python, cada paso se define así:
from pytest_bdd import scenarios, given, when, then
scenarios("login.feature")
@given("que estoy en la página de login")
def ir_a_login(page):
page.goto("https://miapp.com/login")
@when("introduzco un email y una contraseña válidos")
def rellenar_credenciales(page):
page.fill("#email", "usuario@test.com")
page.fill("#password", "Clave123")
@when('pulso el botón "Entrar"')
def pulsar_entrar(page):
page.click("text=Entrar")
@then("accedo a mi panel de usuario")
def verificar_panel(page):
assert page.url.endswith("/panel")El texto entre comillas de cada decorador tiene que coincidir, palabra por palabra, con la línea del .feature. Si cambias una coma en el escenario y no en el step definition, el test falla con un error de "step no encontrado", no con un fallo del comportamiento real. Es la fricción más habitual al empezar con BDD, y desaparece con la práctica.
Reutiliza steps genéricos en vez de escribir uno nuevo por cada escenario: un solo step parametrizado sirve para decenas de escenarios distintos, en vez de tener tres funciones casi idénticas para "soy admin", "soy editor" y "soy usuario".
Scenario Outline: el mismo escenario, muchos datos
Cuando el mismo comportamiento hay que probarlo con distintos datos de entrada (justo lo que piden la partición de equivalencia y los valores límite, ver cómo escribir casos de prueba en QA), Gherkin tiene una construcción para no repetir el escenario entero: Scenario Outline con una tabla Examples.
Scenario Outline: Login con credenciales inválidas
Given que estoy en la página de login
When introduzco el email "<email>" y la contraseña "<password>"
Then veo el mensaje de error "<mensaje>"
Examples:
| email | password | mensaje |
| vacio@test.com | | La contraseña es obligatoria |
| noesunemail | Clave123 | El email no tiene un formato válido |
| usuario@test.com | mal123 | Usuario o contraseña incorrectos |Cada fila de la tabla ejecuta el escenario completo una vez, sustituyendo cada marcador por el valor de esa fila. El step definition no cambia: solo recibe los valores como parámetros. Es la misma idea que @pytest.mark.parametrize en pytest normal, aplicada a Gherkin.
Qué herramientas implementan BDD además de Cucumber
Cucumber fue el primero y sigue siendo el más conocido, pero no es la única forma de ejecutar Gherkin. La elección depende sobre todo del lenguaje que ya usa tu equipo, no de cuál sea "mejor" en abstracto.
| Herramienta | Lenguaje | Dónde encaja |
|---|---|---|
| Cucumber | Java, Ruby, JavaScript | El original, el más documentado, integra bien con Selenium y Playwright |
| behave | Python | La opción más directa si el equipo ya escribe todo en Python |
| pytest-bdd | Python | Igual que behave, pero reutiliza fixtures y plugins de pytest, incluido pytest-playwright |
| SpecFlow / Reqnroll | .NET / C# | Estándar en equipos que ya trabajan con Visual Studio |
| Cucumber.js | JavaScript / TypeScript | La variante que se combina con Playwright o Cypress sin salir del ecosistema JS |
No hay que dominar las cinco. Basta con saber que el concepto (Gherkin desacoplado del código que lo ejecuta) es el mismo en todas, y que la herramienta concreta se elige por el stack del equipo, no al revés.
Cuándo BDD compensa y cuándo se convierte en burocracia
Aquí toca ser honesto, porque BDD tiene fama de solución universal y no lo es. Funciona muy bien en un escenario concreto y se convierte en una capa extra de mantenimiento en otro.
- Solo QA escribe y lee los .feature
- Los escenarios describen selectores e IDs, no comportamiento
- Cientos de steps casi idénticos, ninguno reutilizado
- Nadie de negocio revisa el Gherkin antes de programar
"Negocio, desarrollo y QA acuerdan juntos el Given/When/Then antes de escribir una sola línea de código, y ese archivo es la única fuente de verdad del comportamiento esperado."
Si tu equipo no tiene a nadie de negocio dispuesto a sentarse a escribir o revisar escenarios, Gherkin sigue siendo útil como formato legible, pero la parte que de verdad da valor a BDD (la colaboración antes de programar) no está pasando. En ese caso, unos tests bien escritos con Playwright o pytest sin la capa de Gherkin encima suelen ser más rápidos de mantener.
¿Piden BDD en las ofertas de QA en España?
La respuesta honesta, con datos propios: menos de lo que su presencia en los cursos y en LinkedIn sugiere.
Cucumber, Gherkin o BDD no aparecen entre las 10 herramientas más pedidas en nuestro análisis de 82 ofertas de QA activas en España. Playwright, Selenium, Cypress, testing de API y Postman sí.
Fuente: análisis propio de 17lab, snapshot del 9 de agosto de 2026 (ver qué piden de verdad las ofertas de QA en España)
Eso no significa que sea inútil aprenderlo, significa que no es una prioridad para conseguir tu primera oferta. Si vienes de automatización básica y ya dominas Playwright, Cypress o pytest, BDD es una capa que puedes añadir después, cuando el equipo en el que trabajes de verdad lo pida (normalmente en proyectos grandes con producto y negocio muy involucrados, más que en startups pequeñas).
Como con toda práctica que suena bien en el papel, el criterio importa más que la etiqueta: escribir Gherkin no te hace mejor QA si nadie más en el equipo lo usa para lo que fue pensado. Dominar por qué se prueba algo, ver las técnicas de diseño de casos de prueba, pesa más en una entrevista que saber la sintaxis exacta de Scenario Outline.
Preguntas frecuentes
¿Qué diferencia hay entre BDD, Gherkin y Cucumber?
BDD es una práctica de colaboración entre negocio, desarrollo y QA para acordar el comportamiento esperado antes de programar. Gherkin es el idioma estructurado (Given, When, Then) que se usa para escribir ese acuerdo como texto legible. Cucumber es una de las herramientas que lee ese texto y lo conecta con código ejecutable, no la única.
¿Hace falta saber programar para escribir en Gherkin?
No para escribir el escenario en sí, Gherkin está pensado para que cualquier persona del equipo, incluida negocio, lo lea y lo escriba. Sí hace falta saber programar para conectar cada línea a un step definition que la ejecute de verdad.
¿Scenario Outline sustituye a la partición de equivalencia y los valores límite?
No, es solo el formato para expresarlos en Gherkin sin repetir el escenario completo. Las técnicas que deciden qué filas poner en la tabla Examples, qué valores son representativos y cuáles son límite, siguen siendo las mismas que en cualquier diseño de casos de prueba.
¿Piden BDD o Cucumber en las ofertas de QA en España?
Según nuestro propio análisis de 82 ofertas activas, no entra entre las 10 herramientas más pedidas, muy por detrás de Playwright, Selenium, Cypress o el testing de API. Es más una práctica de equipos concretos que un requisito generalizado del mercado español.
¿Cuándo no conviene usar BDD?
Cuando no hay nadie de negocio o producto dispuesto a participar en escribir o revisar los escenarios. Sin esa colaboración, Gherkin se queda en una capa de sintaxis extra sobre un test que un framework normal habría escrito más rápido.
¿Quieres dar el salto a la automatización?
Aprende a automatizar tests desde cero, con formación práctica orientada al mercado español.