tutoriales.com

Implementando Pruebas de Humo Automatizadas en Pipelines CI/CD con Selenium

Este tutorial práctico detalla cómo diseñar, configurar y ejecutar pruebas de humo automatizadas utilizando Selenium WebDriver dentro de un pipeline de CI/CD, garantizando que las funcionalidades críticas de tu aplicación web funcionen correctamente tras cada despliegue.

Intermedio8 min de lectura11 views
Reportar error

🚀 Introducción a las Pruebas de Humo en CI/CD

En el acelerado mundo del desarrollo de software moderno, la velocidad es tan importante como la calidad. La integración continua y el despliegue continuo (CI/CD) permiten a los equipos enviar código a producción varias veces al día. Sin embargo, ¿cómo podemos estar seguros de que un nuevo despliegue no ha roto las funcionalidades principales de la aplicación?

Aquí es donde entran en juego las pruebas de humo (o Smoke Tests). Una prueba de humo es un conjunto de pruebas automatizadas superficiales pero críticas diseñadas para verificar que los componentes más importantes de un sistema funcionan correctamente antes de invertir tiempo en pruebas más profundas y costosas.

💡 Consejo: Las pruebas de humo no deben ser exhaustivas. Su único objetivo es responder a la pregunta: ¿El sistema es lo suficientemente estable como para continuar con el resto del pipeline o debemos detener el despliegue inmediatamente?

En este tutorial aprenderás a integrar un conjunto básico de pruebas de humo utilizando Python y Selenium WebDriver, automatizando su ejecución dentro de un pipeline de CI/CD para proteger tus entornos de producción y staging.


📋 Prerrequisitos y Configuración del Entorno

Antes de escribir nuestro código de pruebas y configurar el pipeline, asegúrate de contar con las siguientes herramientas instaladas en tu máquina de desarrollo y en tu agente de CI/CD:

  • Python 3.9 o superior
  • Git para control de versiones
  • Un navegador compatible (Google Chrome o Mozilla Firefox)
  • WebDriver correspondiente al navegador instalado

Instalación de Dependencias

Crea un entorno virtual para aislar las dependencias del proyecto y luego instala Selenium y pytest (nuestro framework de pruebas):

python -m venv venv
source venv/bin/activate
pip install selenium pytest
📌 Nota: Asegúrate de guardar tus dependencias en un archivo requirements.txt ejecutando pip freeze > requirements.txt para que el servidor de CI/CD pueda instalarlas automáticamente.

🛠️ Diseñando las Pruebas de Humo con Selenium

Imaginemos que estamos probando una aplicación web de comercio electrónico corporativa. Nuestra prueba de humo validará tres aspectos críticos:

  1. Que la página de inicio carga correctamente y el título es el esperado.
  2. Que el usuario puede navegar a la página de inicio de sesión.
  3. Que los elementos principales del formulario de login están presentes.

Crea un archivo llamado test_smoke.py con el siguiente contenido:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

def test_homepage_loads():
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    
    driver = webdriver.Chrome(options=options)
    try:
        driver.get("https://example.com")
        assert "Example Domain" in driver.title
    finally:
        driver.quit()

def test_login_elements_present():
    options = Options()
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    
    driver = webdriver.Chrome(options=options)
    try:
        driver.get("https://example.com/login")
        username_field = driver.find_element(By.ID, "username")
        password_field = driver.find_element(By.ID, "password")
        submit_button = driver.find_element(By.TAG_NAME, "button")
        
        assert username_field.is_displayed()
        assert password_field.is_displayed()
        assert submit_button.is_displayed()
    finally:
        driver.quit()
⚠️ Advertencia: Es fundamental utilizar el modo --headless en entornos de CI/CD, ya que los servidores de integración continua (como GitHub Actions o GitLab CI) no cuentan con una interfaz gráfica de usuario (GUI) disponible.

🔄 Integrando las Pruebas en el Pipeline CI/CD

Una vez que nuestras pruebas funcionan de manera local, el siguiente paso lógico es automatizar su ejecución cada vez que se realice un commit o pull request. A continuación, veremos cómo configurarlo utilizando GitHub Actions.

Crea un archivo en tu repositorio dentro de la ruta .github/workflows/smoke-tests.yml con el siguiente código:

name: Smoke Tests CI

on:
  push:
    branches: [ "main", "master" ]
  pull_request:
    branches: [ "main", "master" ]

jobs:
  smoke-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v4
      
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.10'
        cache: 'pip'
        
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        
    - name: Install Chrome WebDriver
      uses: browser-actions/setup-chrome@latest
      
    - name: Run Smoke Tests with Pytest
      run: |
        pytest -v test_smoke.py

Flujo de Ejecución del Pipeline

1. Checkout del Código 2. Configurar Python y Dependencias 3. Instalar Navegador Chrome 4. Ejecutar Pruebas Pytest 5. Reporte de Resultados (Éxito o Fallo)

📊 Buenas Prácticas y Monitoreo de Resultados

Para maximizar el valor de tus pruebas de humo dentro de un flujo de CI/CD, ten en cuenta las siguientes recomendaciones:

  • Manténlas Ligeras: Un conjunto de pruebas de humo no debe tardar más de 2 a 5 minutos en ejecutarse por completo.
  • Aislar el Entorno: Ejecuta estas pruebas contra un entorno efímero o un entorno de Staging dedicado que refleje fielmente la producción.
  • Alertas Tempranas: Configura notificaciones automáticas (por Slack, Discord o correo electrónico) si las pruebas de humo fallan en la rama principal.
¿Qué hacer si una prueba de humo falla intermitentemente (flaky test)? Los tests intermitentes destruyen la confianza en el pipeline de CI/CD. Si experimentas fallos debido a problemas de red o tiempos de carga lentos, utiliza esperas explícitas (WebDriverWait) en lugar de retardos estáticos como time.sleep() para asegurar que los elementos estén completamente listos antes de interactuar con ellos.

🎯 Conclusión

Has aprendido con éxito cómo implementar y automatizar pruebas de humo utilizando Selenium y Python, integrándolas directamente en un pipeline de CI/CD con GitHub Actions. Esta práctica te permitirá detectar errores críticos de forma temprana, reduciendo drásticamente el riesgo de desplegar versiones defectuosas a producción y garantizando una experiencia de usuario robusta y confiable.

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!