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

  1. Escribir Pruebas: Asegúrate de que todas las funciones críticas tengan pruebas automatizadas.
  2. Configurar el Entorno: Configura el entorno de pruebas en tu servidor de CI.
  3. 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

  1. Objetivo: Escribir pruebas unitarias para una función de suma.
  2. Instrucciones:
    • Crea una función suma(a, b) que devuelva la suma de a y b.
    • Escribe pruebas unitarias para verificar que la función funciona correctamente con diferentes entradas.
  3. 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

  1. Objetivo: Configurar un pipeline de CI para ejecutar pruebas automatizadas.
  2. Instrucciones:
    • Utiliza Jenkins para configurar un pipeline que ejecute las pruebas unitarias escritas en el Ejercicio 1.
  3. 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.

© Copyright 2024. Todos los derechos reservados