Cucumber

Conceptos Fundamentales

BDD (Behavior-Driven Development)

  • BDD: Metodología de desarrollo que combina técnicas y herramientas de TDD con el diseño dirigido por dominio
  • Lenguaje Gherkin: Sintaxis de lenguaje natural para describir comportamientos del sistema
  • Colaboración: Facilita la comunicación entre desarrolladores, QA y stakeholders no técnicos

Estructura Básica

Feature: Nombre de la funcionalidad
    Como [rol]
    Quiero [característica]
    Para [beneficio]

    Scenario: Nombre del escenario
        Given [condición inicial]
        When [acción]
        Then [resultado esperado]

Instalación y Configuración

Dependencias Maven

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.15.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>7.15.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>7.15.0</version>
    <scope>test</scope>
</dependency>

Configuración JUnit

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/features",
    glue = "stepdefinitions",
    plugin = {"pretty", "html:target/cucumber-reports"}
)
public class RunCucumberTest {
}

Implementación con Java y Spring Boot

Step Definitions

public class LoginStepDefinitions {
    @Given("el usuario está en la página de login")
    public void usuario_en_pagina_login() {
        // Configuración inicial
    }
    @When("ingresa credenciales válidas")
    public void ingresa_credenciales_validas() {
        // Acción del usuario
    }
    @Then("debe acceder al dashboard")
    public void debe_acceder_al_dashboard() {
        // Verificación del resultado
    }
}

Integración con Spring Boot

@SpringBootTest
@CucumberContextConfiguration
public class SpringIntegrationTest {
    @Autowired
    private ApplicationContext applicationContext;
}

Comparativa con Otras Herramientas

vs Cypress

  • Cucumber: Enfocado en BDD y testing de aceptación
  • Cypress: Especializado en testing E2E de aplicaciones web
  • Complementariedad: Pueden usarse conjuntamente

vs Jest

  • Cucumber: Tests basados en comportamiento y lenguaje natural
  • Jest: Framework de testing unitario para JavaScript
  • Diferentes propósitos: Cucumber para aceptación, Jest para unitarios

Integración con CI/CD

Pipeline Jenkins

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'mvn test -Dtest=RunCucumberTest'
            }
            post {
                always {
                    cucumber buildStatus: null,
                    fileIncludePattern: '**/cucumber.json',
                    trendsLimit: 10
                }
            }
        }
    }
}

CICD Best Practices

  • Ejecución paralela: Configurar runners para features independientes
  • Reportes: Generación automática de reportes HTML/JSON
  • Quality Gates: Integración con herramientas de calidad de código

Características Avanzadas

Tags y Organización

@smoke
Feature: Login functionality
    @critical
    Scenario: Successful login
        Given user is on login page
        When user enters valid credentials
        Then user should be redirected to dashboard

Data Tables

Scenario: Multiple user login
    Given the following users exist:
        | username | password |
        | user1    | pass123  |
        | user2    | pass456  |
    When each user logs in
    Then all should access successfully

Scenario Outline

Scenario Outline: Login with different credentials
    Given user is on login page
    When user enters "<username>" and "<password>"
    Then user should see "<message>"
    Examples:
        | username | password | message               |
        | valid    | valid    | Welcome               |
        | invalid  | valid    | Invalid credentials   |