Las pruebas automatizadas son una parte esencial de la Integración Continua (CI). Permiten verificar automáticamente que el código funciona como se espera cada vez que se realiza un cambio. En esta sección, aprenderemos sobre los conceptos básicos de las pruebas automatizadas, los tipos de pruebas, cómo configurarlas y cómo integrarlas en el pipeline de CI.
Conceptos Básicos de Pruebas Automatizadas
¿Qué son las Pruebas Automatizadas?
Las pruebas automatizadas son scripts que se ejecutan automáticamente para verificar que el código cumple con los requisitos especificados. Estas pruebas se pueden ejecutar cada vez que se realiza un cambio en el código, lo que ayuda a detectar errores de manera temprana.
Beneficios de las Pruebas Automatizadas
- Detección temprana de errores: Permiten identificar problemas en el código de manera temprana, lo que reduce el costo y el tiempo de corrección.
- Consistencia: Las pruebas se ejecutan de la misma manera cada vez, eliminando la variabilidad humana.
- Ahorro de tiempo: Una vez que las pruebas están configuradas, se pueden ejecutar repetidamente sin intervención manual.
- Mejora de la calidad del código: Fomentan la escritura de código más limpio y mantenible.
Tipos de Pruebas Automatizadas
Pruebas Unitarias
- Descripción: Verifican el funcionamiento de unidades individuales de código, como funciones o métodos.
- Ejemplo:
def suma(a, b): return a + b def test_suma(): assert suma(1, 2) == 3 assert suma(-1, 1) == 0
Pruebas de Integración
- Descripción: Verifican que diferentes módulos o servicios funcionen correctamente juntos.
- Ejemplo:
def test_integration(): response = api_call('/endpoint') assert response.status_code == 200 assert response.json() == {"key": "value"}
Pruebas Funcionales
- Descripción: Verifican que el sistema completo funcione según lo esperado.
- Ejemplo:
def test_functional(): user = create_user('testuser') login_response = login('testuser', 'password') assert login_response.status_code == 200
Pruebas de Regresión
- Descripción: Aseguran que los cambios recientes no hayan introducido nuevos errores en el código existente.
- Ejemplo:
def test_regression(): old_feature_response = old_feature() assert old_feature_response == expected_output
Configuración de Pruebas Automatizadas
Herramientas Populares
- JUnit: Para pruebas unitarias en Java.
- PyTest: Para pruebas en Python.
- Selenium: Para pruebas funcionales de aplicaciones web.
- Postman: Para pruebas de API.
Integración con el Pipeline de CI
- Escribir Pruebas: Asegúrate de que todas las funciones críticas tengan pruebas automatizadas.
- Configurar el Entorno: Configura el entorno de pruebas en tu servidor de CI.
- Ejecutar Pruebas: Configura tu pipeline de CI para ejecutar las pruebas automáticamente en cada commit.
Ejemplo de Configuración en Jenkins
pipeline { agent any stages { stage('Build') { steps { sh 'make build' } } stage('Test') { steps { sh 'make test' } } } post { always { junit 'reports/**/*.xml' } } }
Ejercicios Prácticos
Ejercicio 1: Escribir Pruebas Unitarias
- Objetivo: Escribir pruebas unitarias para una función de suma.
- Instrucciones:
- Crea una función
suma(a, b)
que devuelva la suma dea
yb
. - Escribe pruebas unitarias para verificar que la función funciona correctamente con diferentes entradas.
- Crea una función
- Solución:
def suma(a, b): return a + b def test_suma(): assert suma(1, 2) == 3 assert suma(-1, 1) == 0 assert suma(0, 0) == 0
Ejercicio 2: Configurar Pruebas en un Pipeline de CI
- Objetivo: Configurar un pipeline de CI para ejecutar pruebas automatizadas.
- Instrucciones:
- Utiliza Jenkins para configurar un pipeline que ejecute las pruebas unitarias escritas en el Ejercicio 1.
- Solución:
pipeline { agent any stages { stage('Build') { steps { sh 'echo "Building..."' } } stage('Test') { steps { sh 'pytest tests/' } } } post { always { junit 'reports/**/*.xml' } } }
Conclusión
En esta sección, hemos aprendido sobre la importancia de las pruebas automatizadas en el proceso de Integración Continua. Hemos explorado diferentes tipos de pruebas, cómo configurarlas y cómo integrarlas en un pipeline de CI. Las pruebas automatizadas son fundamentales para mantener la calidad del código y asegurar que los cambios no introduzcan errores. En la próxima sección, profundizaremos en la integración con el control de versiones.
Curso de CI/CD: Integración y Despliegue Continuo
Módulo 1: Introducción a CI/CD
Módulo 2: Integración Continua (CI)
- Introducción a la Integración Continua
- Configuración de un Entorno de CI
- Automatización de la Construcción
- Pruebas Automatizadas
- Integración con Control de Versiones
Módulo 3: Despliegue Continuo (CD)
- Introducción al Despliegue Continuo
- Automatización del Despliegue
- Estrategias de Despliegue
- Monitoreo y Retroalimentación
Módulo 4: Prácticas Avanzadas de CI/CD
Módulo 5: Implementación de CI/CD en Proyectos Reales
Módulo 6: Herramientas y Tecnologías
Módulo 7: Ejercicios Prácticos
- Ejercicio 1: Configuración de un Pipeline Básico
- Ejercicio 2: Integración de Pruebas Automatizadas
- Ejercicio 3: Despliegue en un Entorno de Producción
- Ejercicio 4: Monitoreo y Retroalimentación