Automatización de Pruebas con GitHub Actions en Integración Continua

Clase 24 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo integrar pruebas automatizadas en tu repositorio con GitHub Actions?

Integrar pruebas automatizadas en un flujo de trabajo es crucial para asegurar la calidad del código y reducir el tiempo de despliegue. A continuación, te guiaré paso a paso para implementar la automatización de pruebas en tu ciclo de integración continua utilizando GitHub Actions. Esto permitirá ejecutar las pruebas eficientemente en cada commit o push a tu repositorio, haciendo que el proceso de desarrollo sea más fluido y seguro.

¿Cómo crear un flujo de trabajo con GitHub Actions?

Para empezar, deberás crear y configurar archivos de flujo de trabajo dentro de tu proyecto. Estos archivos son esenciales para definir cómo y cuándo se ejecutarán las pruebas. Aquí te explico cómo hacerlo:

  1. Crear la carpeta .github: Coloca esta carpeta en el mismo nivel que tu directorio src.

  2. Configurar workflows: Dentro de la carpeta .github, crea otra carpeta llamada workflows. Esta es donde almacenaremos los archivos de configuración YAML necesarios.

  3. Crear el archivo de workflow YAML:

    • Crea un archivo llamado api.continuousintegration.yaml. El nombre es opcional, pero debe ser un archivo .yaml.
    • Asigna un nombre a la ejecución, por ejemplo API, para identificarlo fácilmente.
name: API
on:
  push:
    branches:
      - '**'

¿Cuándo ejecutar las pruebas?

Es crucial definir bajo qué circunstancias se ejecutarán las pruebas. La configuración básica puede ser:

  • Cada push o commit: Define que las pruebas corran en cada push a cualquier branch.
  • Pull requests: Considera activar las pruebas en ramas principales como main o master.

¿Cómo configurar los Jobs en GitHub Actions?

Los jobs son las tareas específicas que GitHub Actions ejecutará. Aquí detallamos cómo configurarlos para las pruebas end-to-end (e2e):

jobs:
  end-to-end:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install dependencies
        run: npm ci

      - name: Run end-to-end tests
        env: # Definir variables de entorno aquí
          VAR1: value1
        run: npm run e2e
  • Sistema operativo: Las pruebas generalmente corren en una instancia de Ubuntu.
  • Node.js instalado: Asegúrate de que la máquina virtual tenga una versión de Node.js lista.
  • Clonar el repositorio: Utiliza el step checkout para copiar el código en el servidor de integración.
  • Instalar dependencias: Utiliza npm ci para instalar dependencias, optimizado para entornos CI.
  • Ejecutar las pruebas: Define las variables de entorno necesarias y ejecuta sus pruebas con npm run e2e.

¿Cómo manejar las variables de entorno?

Las variables de entorno son necesarias para la configuración y ejecución de pruebas. En entornos de integración continua, estas deben declararse directamente en el archivo YAML:

env:
  DATABASE_URL: postgres://user:password@postgres-service/e2etests
  NODE_ENV: ci

¿Cómo correr servicios adicionales como bases de datos?

GitHub Actions permite ejecutar servicios externos similares a Docker. Esto se usa para preparar servicios como bases de datos:

services:
  postgres:
    image: postgres:10
    env:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: secret
    ports:
      - 5432:5432
  • Redes de contenedores: Cambia la conexión de localhost al nombre asignado al servicio, por ejemplo, postgres.

Visualizar y validar las pruebas en GitHub Actions

Una vez configuradas las pruebas, cada push o commit mostrará un feedback visual inmediato en GitHub, indicando si las pruebas han pasado o fallado. Esto permite asegurar constantemente la calidad del código con cada contribución al repositorio:

  • Estado de la prueba: Verás un check verde para un commit válido y una cruz roja si alguna prueba falló. Esto es invaluable para verificar la estabilidad del proyecto y facilitar colaboraciones entre equipos.

Esta integración con GitHub Actions proporciona un flujo de trabajo más robusto, asegurando que cada nueva línea de código respete las normas de calidad y funcionalidad definidas. No dudes en seguir aprendiendo y mejorando tus habilidades en testing y automatización. ¡El camino apenas comienza!