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.
🚀 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.
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
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:
- Que la página de inicio carga correctamente y el título es el esperado.
- Que el usuario puede navegar a la página de inicio de sesión.
- 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()
--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
📊 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
- Despliegues Canario con Istio y Kubernetes: Controlando el Riesgo en CI/CDintermediate20 min
- Observabilidad en Pipelines CI/CD con OpenTelemetry: Monitoreo Unificado y Trazabilidad Extremaintermediate20 min
- Optimización de Pipelines CI/CD con Build Caching Distribuido: Acelerando Tus Buildsintermediate15 min
- Implementando Blue/Green Deployments con Kubernetes y GitOps para CI/CD sin Downtimeintermediate20 min
- Control de Calidad: Integrando Análisis de Seguridad Estático (SAST) en Tu Pipeline CI/CDintermediate18 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!