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:

  1. Navega a tu proyecto en CircleCI
  2. Ve a Project Settings > Environment Variables
  3. Agrega las siguientes variables:
    • LOADFOCUS_API_KEY: Tu clave API de LoadFocus
    • LOADFOCUS_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.1
jobs:
performance_test:
docker:
- image: cimg/node:16.13
steps:
- checkout
- run:
name: Install LoadFocus JMeter API Client
command: npm install -g @loadfocus/loadfocus-api-client
- run:
name: Configure LoadFocus API Client
command: |
loadfocus-api config set apikey $LOADFOCUS_API_KEY
loadfocus-api config set teamid $LOADFOCUS_TEAM_ID
- run:
name: Run Performance Tests
command: |
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.json
destination: performance-test-results
workflows:
version: 2
build_test_deploy:
jobs:
- build_and_test
- performance_test:
requires:
- build_and_test
- deploy:
requires:
- performance_test
filters:
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 Tests
command: |
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 umbrales
if [ $? -ne 0 ]; then
echo "Performance test failed to meet thresholds"
exit 1
fi

Configuración Avanzada

Pruebas en Paralelo

Para ejecutar múltiples pruebas de rendimiento en paralelo:

performance_tests:
docker:
- image: cimg/node:16.13
parallelism: 3
steps:
- checkout
- run:
name: Install LoadFocus JMeter API Client
command: npm install -g @loadfocus/loadfocus-api-client
- run:
name: Configure LoadFocus API Client
command: |
loadfocus-api config set apikey $LOADFOCUS_API_KEY
loadfocus-api config set teamid $LOADFOCUS_TEAM_ID
- run:
name: Run Performance Tests
command: |
# Obtener nombre de prueba basado en el índice
TESTS=("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_*.json
destination: performance-test-results

Consejos para la Integración con CircleCI

  1. 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.

  2. Configuración de Tiempo de Espera: Para pruebas más largas, ajusta el tiempo de espera del job en CircleCI:

    - run:
    name: Run Performance Tests
    command: loadfocus-api jmeter run-test --name "Test_Name" --waitTimeout 3600
    no_output_timeout: 60m
  3. Pruebas 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 >>
  4. Notificaciones: Configura notificaciones para fallos en pruebas de rendimiento:

    - run:
    name: Notify on Performance Test Failure
    command: |
    if [ $? -ne 0 ]; then
    curl -X POST -H "Content-Type: application/json" \
    -d '{"text":"Performance test failed for $CIRCLE_PROJECT_REPONAME"}' \
    $SLACK_WEBHOOK_URL
    fi
    when: on_fail

Para más información, consulta la documentación de CircleCI y la documentación del Cliente API de LoadFocus.