CircleCI
Esta guía explica cómo integrar el Cliente API de JMeter de LoadFocus con CircleCI para pruebas de rendimiento automatizadas.
Pasos de Configuración
1. Agregar Variables de Entorno
Almacena tus credenciales de API de LoadFocus como variables de entorno en CircleCI:
- Navega a tu proyecto en CircleCI
- Ve a Project Settings > Environment Variables
- Agrega las siguientes variables:
LOADFOCUS_API_KEY: Tu clave API de LoadFocusLOADFOCUS_TEAM_ID: Tu ID de equipo de LoadFocus
2. Configurar el Flujo de Trabajo de CircleCI
Crea o actualiza tu archivo .circleci/config.yml para incluir pruebas de rendimiento:
version: 2.1jobs:performance_test:docker:- image: cimg/node:16.13steps:- checkout- run:name: Install LoadFocus JMeter API Clientcommand: npm install -g @loadfocus/loadfocus-api-client- run:name: Configure LoadFocus API Clientcommand: |loadfocus-api config set apikey $LOADFOCUS_API_KEYloadfocus-api config set teamid $LOADFOCUS_TEAM_ID- run:name: Run Performance Testscommand: |loadfocus-api jmeter run-test \--name "CircleCI_${CIRCLE_PROJECT_REPONAME}_${CIRCLE_BRANCH}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json- store_artifacts:path: performance_results.jsondestination: performance-test-resultsworkflows:version: 2build_test_deploy:jobs:- build_and_test- performance_test:requires:- build_and_test- deploy:requires:- performance_testfilters:branches:only: main
3. Fallar la Compilación por Problemas de Rendimiento
Para hacer que tu pipeline falle cuando no se cumplan los umbrales de rendimiento, modifica el paso "Run Performance Tests":
- run:name: Run Performance Testscommand: |loadfocus-api jmeter run-test \--name "CircleCI_${CIRCLE_PROJECT_REPONAME}_${CIRCLE_BRANCH}" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > performance_results.json# Verificar código de salida - el comando saldrá con código 1 si no se cumplen los umbralesif [ $? -ne 0 ]; thenecho "Performance test failed to meet thresholds"exit 1fi
Configuración Avanzada
Pruebas en Paralelo
Para ejecutar múltiples pruebas de rendimiento en paralelo:
performance_tests:docker:- image: cimg/node:16.13parallelism: 3steps:- checkout- run:name: Install LoadFocus JMeter API Clientcommand: npm install -g @loadfocus/loadfocus-api-client- run:name: Configure LoadFocus API Clientcommand: |loadfocus-api config set apikey $LOADFOCUS_API_KEYloadfocus-api config set teamid $LOADFOCUS_TEAM_ID- run:name: Run Performance Testscommand: |# Obtener nombre de prueba basado en el índiceTESTS=("API_Test" "Frontend_Test" "Database_Test")INDEX=$(( $CIRCLE_NODE_INDEX % 3 ))TEST_NAME=${TESTS[$INDEX]}echo "Running test: $TEST_NAME"loadfocus-api jmeter run-test \--name "$TEST_NAME" \--thresholds "avgresponse<=200,errors==0,p95<=250" \--format json > "performance_results_${TEST_NAME}.json"- store_artifacts:path: performance_results_*.jsondestination: performance-test-results
Consejos para la Integración con CircleCI
Asignación de Recursos: Asegúrate de que tu plan de CircleCI tenga suficientes recursos para ejecutar pruebas de rendimiento, especialmente si son de larga duración.
Configuración de Tiempo de Espera: Para pruebas más largas, ajusta el tiempo de espera del job en CircleCI:
- run:name: Run Performance Testscommand: loadfocus-api jmeter run-test --name "Test_Name" --waitTimeout 3600no_output_timeout: 60mPruebas Condicionales: Ejecuta pruebas de rendimiento solo en ramas específicas o para commits específicos:
performance_test:# Solo ejecutar si el mensaje del commit contiene [PERF-TEST]when:condition:or:- equal: [ main, << pipeline.git.branch >> ]- matches:pattern: ".*\\[PERF-TEST\\].*"value: << pipeline.git.commit.message >>Notificaciones: Configura notificaciones para fallos en pruebas de rendimiento:
- run:name: Notify on Performance Test Failurecommand: |if [ $? -ne 0 ]; thencurl -X POST -H "Content-Type: application/json" \-d '{"text":"Performance test failed for $CIRCLE_PROJECT_REPONAME"}' \$SLACK_WEBHOOK_URLfiwhen: on_fail
Para más información, consulta la documentación de CircleCI y la documentación del Cliente API de LoadFocus.