CircleCI

Ce guide explique comment integrer le client API JMeter de LoadFocus avec CircleCI pour les tests de performance automatises.

Etapes de configuration

1. Ajouter des variables d'environnement

Stockez vos identifiants API LoadFocus en tant que variables d'environnement dans CircleCI :

  1. Accedez a votre projet dans CircleCI
  2. Allez dans Project Settings > Environment Variables
  3. Ajoutez les variables suivantes :
    • LOADFOCUS_API_KEY : Votre cle API LoadFocus
    • LOADFOCUS_TEAM_ID : Votre ID d'equipe LoadFocus

2. Configurer le workflow CircleCI

Creez ou mettez a jour votre fichier .circleci/config.yml pour inclure les tests de performance :

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. Faire echouer le build en cas de problemes de performance

Pour faire echouer votre pipeline lorsque les seuils de performance ne sont pas atteints, modifiez l'etape "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
# Verifier le code de sortie - la commande se terminera avec le code 1 si les seuils ne sont pas atteints
if [ $? -ne 0 ]; then
echo "Performance test failed to meet thresholds"
exit 1
fi

Configuration avancee

Tests paralleles

Pour executer plusieurs tests de performance en parallele :

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: |
# Obtenir le nom du test en fonction de l'index
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

Conseils pour l'integration CircleCI

  1. Allocation de ressources : Assurez-vous que votre forfait CircleCI dispose de suffisamment de ressources pour executer les tests de performance, surtout s'ils sont de longue duree.

  2. Parametres de delai d'attente : Pour les tests plus longs, ajustez le delai d'attente du job dans CircleCI :

    - run:
    name: Run Performance Tests
    command: loadfocus-api jmeter run-test --name "Test_Name" --waitTimeout 3600
    no_output_timeout: 60m
  3. Tests conditionnels : Executez les tests de performance uniquement sur des branches specifiques ou pour des commits specifiques :

    performance_test:
    # Executer uniquement si le message de commit contient [PERF-TEST]
    when:
    condition:
    or:
    - equal: [ main, << pipeline.git.branch >> ]
    - matches:
    pattern: ".*\\[PERF-TEST\\].*"
    value: << pipeline.git.commit.message >>
  4. Notifications : Configurez des notifications pour les echecs de tests de performance :

    - 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

Pour plus d'informations, consultez la documentation CircleCI et la documentation du client API LoadFocus.