GitHub Actions
Esta guía explica cómo integrar el Cliente API de JMeter de LoadFocus con GitHub Actions para pruebas de rendimiento automatizadas.
Pasos de Configuración
1. Almacenar Credenciales como Secretos de GitHub
Primero, almacena tus credenciales de API de LoadFocus como secretos del repositorio de GitHub:
- Ve a tu repositorio de GitHub
- Navega a Settings > Secrets and variables > Actions
- Agrega los siguientes secretos del repositorio:
LOADFOCUS_API_KEY: Tu clave API de LoadFocusLOADFOCUS_TEAM_ID: Tu ID de equipo de LoadFocus
2. Crear un Flujo de Trabajo de GitHub Actions
Crea un nuevo archivo en tu repositorio en .github/workflows/performance-test.yml:
name: Performance Testson:push:branches: [ main, develop ]pull_request:branches: [ main ]# Opcional: Ejecutar según un horarioschedule:- cron: '0 0 * * 1' # Ejecutar a medianoche todos los lunesjobs:performance-test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: '16'- name: Install LoadFocus JMeter API Clientrun: npm install -g @loadfocus/loadfocus-api-client- name: Configure LoadFocus API Clientrun: |loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}- name: Run Performance Testsrun: |loadfocus-api jmeter run-test \--name "GitHub_${{ github.repository_owner }}_${{ github.repository }}_${{ github.ref_name }}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json- name: Upload Performance Test Resultsuses: actions/upload-artifact@v3with:name: performance-test-resultspath: performance_results.json
3. Agregar Pruebas de Rendimiento a tu Flujo de Trabajo de Despliegue
Para hacer que el despliegue dependa de los resultados de las pruebas de rendimiento:
name: Build, Test, and Deployon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:# Tus pasos de compilación...performance-test:needs: buildruns-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: '16'- name: Install LoadFocus JMeter API Clientrun: npm install -g @loadfocus/loadfocus-api-client- name: Configure LoadFocus API Clientrun: |loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}- name: Run Performance Testsrun: |loadfocus-api jmeter run-test \--name "GitHub_${{ github.repository }}_${{ github.ref_name }}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json- name: Upload Performance Test Resultsuses: actions/upload-artifact@v3with:name: performance-test-resultspath: performance_results.jsondeploy:needs: performance-testruns-on: ubuntu-lateststeps:# Tus pasos de despliegue...
Configuración Avanzada
Pruebas Matriciales para Múltiples Entornos
Ejecuta pruebas contra múltiples entornos o configuraciones:
jobs:performance-test:runs-on: ubuntu-lateststrategy:matrix:environment: [dev, staging, production]test-type: [api, frontend]steps:# Pasos de configuración...- name: Run Performance Testsrun: |TEST_NAME="${{ matrix.test-type }}_test_${{ matrix.environment }}"# Ajustar umbrales según el entornoif [ "${{ matrix.environment }}" == "production" ]; thenTHRESHOLDS="avgresponse<=150,errors==0,p95<=200"elseTHRESHOLDS="avgresponse<=300,errors==0,p95<=500"filoadfocus-api jmeter run-test \--name "$TEST_NAME" \--thresholds "$THRESHOLDS" \--format json > "performance_results_${{ matrix.environment }}_${{ matrix.test-type }}.json"
Crear Informes de Pruebas de Rendimiento
Genera informes HTML a partir de resultados JSON:
- name: Generate HTML Reportrun: |# Instalar generador de informesnpm install -g performance-report-generator# Generar informe HTMLperformance-report-generator \--input performance_results.json \--output performance_report.html- name: Upload HTML Reportuses: actions/upload-artifact@v3with:name: performance-test-reportpath: performance_report.html# Opcional: Publicar en GitHub Pages- name: Publish to GitHub Pagesuses: peaceiris/actions-gh-pages@v3with:github_token: ${{ secrets.GITHUB_TOKEN }}publish_dir: ./reportsdestination_dir: performance-reports
Comentar Resultados de Pruebas en PRs
Agrega los resultados de pruebas de rendimiento como comentario en pull requests:
- name: Comment PRuses: actions/github-script@v6if: github.event_name == 'pull_request'with:github-token: ${{ secrets.GITHUB_TOKEN }}script: |const fs = require('fs');const results = JSON.parse(fs.readFileSync('performance_results.json', 'utf8'));let comment = '## Performance Test Results\n\n';comment += `**Overall Result:** ${results.overallResult}\n\n`;comment += '### Results by Label\n\n';for (const label of results.labels) {comment += `#### ${label.label}\n`;comment += `- **Result:** ${label.result}\n`;comment += `- **Samples:** ${label.metrics.samples}\n`;comment += `- **Avg Response:** ${label.metrics.avgresponse}ms\n`;comment += `- **Error Rate:** ${label.metrics.errors}\n\n`;}github.rest.issues.createComment({issue_number: context.issue.number,owner: context.repo.owner,repo: context.repo.repo,body: comment});
Flujo de Trabajo Reutilizable
Crea un flujo de trabajo reutilizable para pruebas de rendimiento:
# .github/workflows/reusable-performance-test.ymlname: Reusable Performance Teston:workflow_call:inputs:test-name:required: truetype: stringthresholds:required: falsetype: stringdefault: "avgresponse<=200,errors==0,p95<=250"wait-timeout:required: falsetype: numberdefault: 1800secrets:LOADFOCUS_API_KEY:required: trueLOADFOCUS_TEAM_ID:required: truejobs:performance-test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: '16'- name: Install LoadFocus JMeter API Clientrun: npm install -g @loadfocus/loadfocus-api-client- name: Configure LoadFocus API Clientrun: |loadfocus-api config set apikey ${{ secrets.LOADFOCUS_API_KEY }}loadfocus-api config set teamid ${{ secrets.LOADFOCUS_TEAM_ID }}- name: Run Performance Testsrun: |loadfocus-api jmeter run-test \--name "${{ inputs.test-name }}" \--thresholds "${{ inputs.thresholds }}" \--waitTimeout ${{ inputs.wait-timeout }} \--format json > performance_results.json- name: Upload Performance Test Resultsuses: actions/upload-artifact@v3with:name: performance-test-resultspath: performance_results.json
Luego llámalo desde otro flujo de trabajo:
# .github/workflows/main.ymljobs:call-performance-test:uses: ./.github/workflows/reusable-performance-test.ymlwith:test-name: "API_Performance_Test"thresholds: "avgresponse<=150,errors==0"secrets:LOADFOCUS_API_KEY: ${{ secrets.LOADFOCUS_API_KEY }}LOADFOCUS_TEAM_ID: ${{ secrets.LOADFOCUS_TEAM_ID }}
Consejos para la Integración con GitHub Actions
Caché: Almacena en caché las dependencias de npm para acelerar las ejecuciones del flujo de trabajo:
- name: Cache Node modulesuses: actions/cache@v3with:path: ~/.npmkey: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}restore-keys: |${{ runner.os }}-node-Control de Concurrencia: Limita las pruebas de rendimiento concurrentes:
concurrency:group: performance-test-${{ github.ref }}cancel-in-progress: falsePruebas Específicas por Entorno: Usa entornos de GitHub para diferentes configuraciones de prueba:
jobs:performance-test:runs-on: ubuntu-latestenvironment: staging# Las variables específicas del entorno están disponibles aquíPruebas Condicionales: Ejecuta pruebas de rendimiento solo cuando cambien archivos específicos:
jobs:performance-test:if: |contains(github.event.pull_request.labels.*.name, 'performance-test') ||github.event_name == 'schedule' ||contains(github.event.head_commit.message, '[perf-test]')
Para más información, consulta la documentación de GitHub Actions y la documentación del Cliente API de LoadFocus.