GitLab CI/CD
Esta guía explica cómo integrar el Cliente API de JMeter de LoadFocus con GitLab CI/CD para pruebas de rendimiento automatizadas.
Pasos de Configuración
1. Almacenar Credenciales como Variables de GitLab CI/CD
Primero, almacena tus credenciales de API de LoadFocus como variables de GitLab CI/CD:
- Ve a tu proyecto de GitLab
- Navega a Settings > CI/CD > Variables
- Agrega las siguientes variables:
LOADFOCUS_API_KEY: Tu clave API de LoadFocus (marca como "Masked")LOADFOCUS_TEAM_ID: Tu ID de equipo de LoadFocus
2. Crear un Pipeline de GitLab CI/CD
Crea o actualiza tu archivo .gitlab-ci.yml en tu repositorio:
stages:- build- test- performance- deployvariables:NODE_VERSION: "16"build:stage: buildimage: node:${NODE_VERSION}script:- npm install- npm run buildartifacts:paths:- dist/expire_in: 1 weektest:stage: testimage: node:${NODE_VERSION}script:- npm install- npm testperformance_test:stage: performanceimage: node:${NODE_VERSION}script:# Instalar Cliente API de JMeter de LoadFocus- npm install -g @loadfocus/loadfocus-api-client# Configurar Cliente API de LoadFocus- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID# Ejecutar Pruebas de Rendimiento- |loadfocus-api jmeter run-test \--name "GitLab_${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.jsonartifacts:paths:- performance_results.jsonexpire_in: 1 weekwhen: always# Opcional: Solo ejecutar en ramas específicasonly:- main- developdeploy:stage: deployscript:- echo "Deploying application..."only:- main# Solo desplegar si todas las etapas anteriores tuvieron éxitowhen: on_success
3. Ver Resultados de Pruebas
Después de que el pipeline se ejecute:
- Ve a tu proyecto de GitLab
- Navega a CI/CD > Pipelines
- Encuentra tu pipeline y haz clic en él
- Ve al job "performance_test"
- Haz clic en "Browse" en la barra lateral derecha para ver los artefactos
- Descarga y visualiza el archivo
performance_results.json
Configuración Avanzada
Pruebas Específicas por Entorno
Ejecuta diferentes pruebas de rendimiento para diferentes entornos:
.performance_test_template: &performance_test_definitionstage: performanceimage: node:${NODE_VERSION}script:- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "${TEST_NAME}" \--thresholds "${THRESHOLDS}" \--format json > performance_results.jsonartifacts:paths:- performance_results.jsonexpire_in: 1 weekwhen: alwaysperformance_test_develop:<<: *performance_test_definitionvariables:TEST_NAME: "API_Test_Develop"THRESHOLDS: "avgresponse<=300,errors==0,p95<=500"only:- developperformance_test_staging:<<: *performance_test_definitionvariables:TEST_NAME: "API_Test_Staging"THRESHOLDS: "avgresponse<=250,errors==0,p95<=350"only:- stagingperformance_test_production:<<: *performance_test_definitionvariables:TEST_NAME: "API_Test_Production"THRESHOLDS: "avgresponse<=200,errors==0,p95<=250"only:- main
Pruebas en Paralelo
Ejecuta múltiples pruebas de rendimiento en paralelo:
performance_test_api:stage: performanceimage: node:${NODE_VERSION}script:- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "API_Performance_Test" \--thresholds "avgresponse<=150,errors==0" \--format json > api_performance_results.jsonartifacts:paths:- api_performance_results.jsonexpire_in: 1 weekperformance_test_ui:stage: performanceimage: node:${NODE_VERSION}script:- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "UI_Performance_Test" \--thresholds "avgresponse<=300,errors==0" \--format json > ui_performance_results.jsonartifacts:paths:- ui_performance_results.jsonexpire_in: 1 week
Luego crea un horario de pipeline en GitLab:
- Ve a tu proyecto de GitLab
- Navega a CI/CD > Schedules
- Haz clic en "New schedule"
- Configura un horario (por ejemplo, todos los días a medianoche)
Crear Informes de Rendimiento
Genera informes HTML a partir de resultados JSON:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Ejecutar prueba de rendimiento- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "GitLab_${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json# Generar informe HTML- npm install -g performance-report-generator # Reemplazar con el generador de informes real- performance-report-generator --input performance_results.json --output performance_report.htmlartifacts:paths:- performance_results.json- performance_report.htmlexpire_in: 1 weekwhen: always# Opcional: Publicar informe como GitLab Pagespages:stage: deploydependencies:- performance_testscript:- mkdir -p public/performance-reports- cp performance_report.html public/performance-reports/index.htmlartifacts:paths:- publiconly:- main
Integración con Funcionalidades de GitLab
Widgets de Merge Request
Muestra los resultados de pruebas de rendimiento en merge requests usando la funcionalidad de informes JUnit de GitLab:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Ejecutar prueba de rendimiento- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "GitLab_${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json# Convertir a formato JUnit (usando un script personalizado)- node convert-to-junit.js performance_results.json junit-report.xmlartifacts:reports:junit: junit-report.xmlpaths:- performance_results.jsonexpire_in: 1 week
Métricas de GitLab
Usa la funcionalidad de métricas de GitLab para rastrear el rendimiento a lo largo del tiempo:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Ejecutar prueba de rendimiento- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "GitLab_${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json# Extraer métricas e informarlas a GitLab- |# Analizar JSON y extraer métricasRESPONSE_TIME=$(jq '.labels[0].metrics.avgresponse' performance_results.json)ERROR_RATE=$(jq '.labels[0].metrics.errors' performance_results.json)# Informar métricasecho "performance_avg_response_time ${RESPONSE_TIME}" >> metrics.txtecho "performance_error_rate ${ERROR_RATE}" >> metrics.txtartifacts:reports:metrics: metrics.txtpaths:- performance_results.jsonexpire_in: 1 week
Entornos de GitLab
Asocia pruebas de rendimiento con entornos específicos:
performance_test_staging:stage: performanceimage: node:${NODE_VERSION}environment:name: stagingscript:- npm install -g @loadfocus/loadfocus-api-client- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID- |loadfocus-api jmeter run-test \--name "Staging_Performance_Test" \--thresholds "avgresponse<=250,errors==0" \--format json > performance_results.jsonartifacts:paths:- performance_results.jsonexpire_in: 1 weekonly:- staging
Consejos para la Integración con GitLab CI/CD
Caché: Almacena en caché las dependencias de npm para acelerar las ejecuciones del pipeline:
performance_test:stage: performanceimage: node:${NODE_VERSION}cache:key: ${CI_COMMIT_REF_SLUG}paths:- node_modules/script:- npm install -g @loadfocus/loadfocus-api-client# Resto del script...Configuración de Tiempo de Espera: Establece tiempos de espera para pruebas de rendimiento de larga duración:
performance_test:stage: performanceimage: node:${NODE_VERSION}timeout: 2h # Establecer un tiempo de espera de 2 horasscript:# Script de prueba de rendimiento...Disparadores Manuales: Permite que las pruebas de rendimiento se disparen manualmente:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Script de prueba de rendimiento...when: manualConfiguración Dinámica de Pruebas: Usa variables predefinidas de GitLab para configurar pruebas dinámicamente:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:- |# Establecer umbrales según la ramaif [ "$CI_COMMIT_REF_NAME" = "main" ]; thenTHRESHOLDS="avgresponse<=200,errors==0,p95<=250"elseTHRESHOLDS="avgresponse<=300,errors==0,p95<=500"filoadfocus-api jmeter run-test \--name "GitLab_${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}" \--thresholds "$THRESHOLDS" \--format json > performance_results.jsonNotificaciones: Envía notificaciones cuando fallen las pruebas de rendimiento:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Script de prueba de rendimiento...after_script:- |if [ $? -ne 0 ]; then# Enviar notificación usando curl, API de GitLab u otro métodocurl -X POST -H "Content-Type: application/json" \-d "{\"text\":\"Performance test failed for ${CI_PROJECT_NAME}\"}" \$WEBHOOK_URLfi
Para más información, consulta la documentación de GitLab CI/CD y la documentación del Cliente API de LoadFocus.