Configurar GitHub Actions para ejecutar tests automáticamente
Integrar pruebas unitarias con dotnet test
Añadir pruebas de API y UI al pipeline
Publicar reportes de resultados
Aplicar buenas prácticas de testing en CI/CD
1. ¿Qué es CI/CD?
graph LR
A[Commit] --> B[Build]
B --> C[Unit Tests]
C --> D[Integration Tests]
D --> E[Deploy Staging]
E --> F[UI/API Tests]
F --> G[Deploy Producción]
style A fill:#2196F3,color:white
style C fill:#4CAF50,color:white
style F fill:#FF9800,color:white
style G fill:#9C27B0,color:white
Concepto
Descripción
CI (Continuous Integration)
Compilar y testear automáticamente cada commit
CD (Continuous Delivery)
Desplegar automáticamente a staging tras pasar tests
CD (Continuous Deployment)
Desplegar automáticamente a producción
¿Por qué CI/CD en Testing?
Sin CI/CD
Con CI/CD
Tests manuales, se olvidan
Tests automáticos en cada commit
Errores detectados tarde
Errores detectados en minutos
“Funciona en mi máquina”
Entorno consistente
Despliegues arriesgados
Despliegues con confianza
2. GitHub Actions: Conceptos
Estructura
# .github/workflows/nombre.ymlname:CIon:# ¿Cuándo se ejecuta?push:branches:[main]pull_request:branches:[main]jobs:# Trabajos a ejecutarbuild:runs-on:ubuntu-latest# Máquina virtualsteps:# Pasos secuenciales-name:Checkoutuses:actions/checkout@v4-name:Buildrun:dotnet build
name:CI/CD Completoon:push:branches:[main]jobs:# === STAGE 1: Build y Unit Tests ===unit-tests:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-uses:actions/setup-dotnet@v4with:dotnet-version:'9.0.x'-run:dotnet restore-run:dotnet build --no-restore-run:dotnet test --no-build --filter "Category=Unit"# === STAGE 2: Tests de integración ===integration-tests:runs-on:ubuntu-latestneeds:unit-tests# Espera a que pasen los unit testsservices:sqlserver:image:mcr.microsoft.com/mssql/server:2022-latestenv:SA_PASSWORD:YourStrong!Password123ACCEPT_EULA:Yports:-1433:1433steps:-uses:actions/checkout@v4-uses:actions/setup-dotnet@v4with:dotnet-version:'9.0.x'-run:dotnet restore-run:dotnet build --no-restore-name:Tests de integraciónrun:dotnet test --no-build --filter "Category=Integration"env:ConnectionStrings__Default:"Server=localhost;Database=TestDb;User=sa;Password=YourStrong!Password123;TrustServerCertificate=True"# === STAGE 3: Tests API ===api-tests:runs-on:ubuntu-latestneeds:integration-testssteps:-uses:actions/checkout@v4-uses:actions/setup-node@v4with:node-version:'20'-name:Instalar Newmanrun:npm install -g newman newman-reporter-htmlextra-name:Ejecutar tests Postmanrun:|newman run tests/postman/collection.json \-e tests/postman/env-ci.json \--reporters cli,htmlextra \--reporter-htmlextra-export reports/api-report.html-name:Subir reporte APIif:always()uses:actions/upload-artifact@v4with:name:api-test-reportpath:reports/# === STAGE 4: Tests UI ===ui-tests:runs-on:ubuntu-latestneeds:integration-testssteps:-uses:actions/checkout@v4-uses:actions/setup-dotnet@v4with:dotnet-version:'9.0.x'-run:dotnet restore-run:dotnet build --no-restore-name:Instalar navegadores Playwrightrun:pwsh MiApp.PlaywrightTests/bin/Debug/net9.0/playwright.ps1 install --with-deps-name:Ejecutar tests UIrun:dotnet test MiApp.PlaywrightTests --no-build-name:Subir tracesif:failure()uses:actions/upload-artifact@v4with:name:playwright-tracespath:MiApp.PlaywrightTests/bin/Debug/net9.0/traces/
Diagrama del pipeline
graph TD
A[Push a main] --> B[Unit Tests]
B --> C[Integration Tests + SQL Server]
C --> D[API Tests - Newman]
C --> E[UI Tests - Playwright]
D --> F[Deploy]
E --> F
style B fill:#4CAF50,color:white
style C fill:#2196F3,color:white
style D fill:#FF9800,color:white
style E fill:#FF9800,color:white
style F fill:#9C27B0,color:white
6. Matriz de navegadores
cross-browser-tests:runs-on:ubuntu-lateststrategy:matrix:browser:[chromium,firefox,webkit]fail-fast:falsesteps:-uses:actions/checkout@v4-uses:actions/setup-dotnet@v4with:dotnet-version:'9.0.x'-run:dotnet build MiApp.PlaywrightTests-name:Instalar navegadoresrun:pwsh MiApp.PlaywrightTests/bin/Debug/net9.0/playwright.ps1 install --with-deps-name:Tests en ${{ matrix.browser }}run:dotnet test MiApp.PlaywrightTests --no-buildenv:BROWSER:${{ matrix.browser }}
7. Badges de estado
Añade un badge al README para mostrar el estado del pipeline: