GitLab CI/CD
Ten przewodnik wyjasnia, jak zintegrowac klienta API JMeter LoadFocus z GitLab CI/CD w celu automatycznego testowania wydajnosci.
Kroki konfiguracji
1. Przechowywanie danych uwierzytelniajacych jako zmiennych GitLab CI/CD
Najpierw przechowuj dane uwierzytelniajace API LoadFocus jako zmienne GitLab CI/CD:
- Przejdz do swojego projektu GitLab
- Przejdz do Settings > CI/CD > Variables
- Dodaj nastepujace zmienne:
LOADFOCUS_API_KEY: Twoj klucz API LoadFocus (oznacz jako "Masked")LOADFOCUS_TEAM_ID: ID Twojego zespolu LoadFocus
2. Utworz potok GitLab CI/CD
Utworz lub zaktualizuj plik .gitlab-ci.yml w swoim repozytorium:
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:# Zainstaluj klienta API JMeter LoadFocus- npm install -g @loadfocus/loadfocus-api-client# Skonfiguruj klienta API LoadFocus- loadfocus-api config set apikey $LOADFOCUS_API_KEY- loadfocus-api config set teamid $LOADFOCUS_TEAM_ID# Uruchom testy wydajnosci- |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# Opcjonalnie: Uruchom tylko na okreslonych galeziachonly:- main- developdeploy:stage: deployscript:- echo "Deploying application..."only:- main# Wdrazaj tylko jesli wszystkie poprzednie etapy powiodly siewhen: on_success
3. Przegladanie wynikow testow
Po uruchomieniu potoku:
- Przejdz do swojego projektu GitLab
- Przejdz do CI/CD > Pipelines
- Znajdz swoj potok i kliknij go
- Przejdz do zadania "performance_test"
- Kliknij "Browse" w prawym panelu bocznym, aby wyswietlic artefakty
- Pobierz i przejrzyj plik
performance_results.json
Zaawansowana konfiguracja
Testowanie specyficzne dla srodowiska
Uruchamiaj rozne testy wydajnosci dla roznych srodowisk:
.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
Testowanie rownolegle
Uruchom wiele testow wydajnosci rownolegle:
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
Wskazowki dotyczace integracji z GitLab CI/CD
Buforowanie: Buforuj zaleznosci npm, aby przyspieszyc uruchamianie potoku:
performance_test:stage: performanceimage: node:${NODE_VERSION}cache:key: ${CI_COMMIT_REF_SLUG}paths:- node_modules/script:- npm install -g @loadfocus/loadfocus-api-client# Reszta skryptu...Ustawienia timeout: Ustaw timeout dla dlugotrwalych testow wydajnosci:
performance_test:stage: performanceimage: node:${NODE_VERSION}timeout: 2h # Ustaw timeout na 2 godzinyscript:# Skrypt testu wydajnosci...Reczne wyzwalanie: Pozwol na reczne wyzwalanie testow wydajnosci:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:# Skrypt testu wydajnosci...when: manualDynamiczna konfiguracja testow: Uzyj predefiniowanych zmiennych GitLab do dynamicznej konfiguracji testow:
performance_test:stage: performanceimage: node:${NODE_VERSION}script:- |# Ustaw progi na podstawie galeziif [ "$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.json
Aby uzyskac wiecej informacji, zapoznaj sie z dokumentacja GitLab CI/CD i dokumentacja klienta API LoadFocus.