slogan3

Ontwerp een GitLab CI pipeline voor geautomatiseerde performance tests

description

Met deze prompt kun je een geautomatiseerde performance testpipeline opzetten binnen GitLab CI, waardoor je continu inzicht krijgt in de prestaties van je applicatie. Dit helpt problemen vroegtijdig te signaleren en de kwaliteit te verbeteren, wat handmatige tests en inefficiënte monitoring vervangt.

prompt

Help me een GitLab CI pipeline te ontwerpen die geautomatiseerde performance tests uitvoert na elke build. Mijn projecttype of technologie stack: <voer het type project of technologie stack in>. Testtools of frameworks die ik wil gebruiken: <geef de performance testtools of frameworks op>. Specifieke performance doelen of me ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorstel voor een GitLab CI pipeline die geautomatiseerde performance tests uitvoert na elke build, met k6 voor Node.js microservices. De pipeline bevat stages voor build, testen en performance tests, inclusief rapportage via Slack en het bewaken van de prestatie- en resource-doelen. ```yaml stages: - build - test - performance variables: K6_SCRIPT: "perf_tests/test_script.js" SLACK_WEBHOOK_URL: "<je_slack_webhook_url>" # Vul hier je Slack webhook in build_job: stage: build image: maven:3.8.4-jdk-11 script: - mvn package artifacts: paths: - target/ test_job: stage: test image: maven:3.8.4-jdk-11 script: - mvn test performance_job: stage: performance image: grafana/k6:latest script: - | echo "Start performance test..." k6 run --out json=results.json $K6_SCRIPT echo "Analyseren resultaten..." # Parse JSON resultaten en controleer op doelen node analyze_results.js timeout: 10m artifacts: when: always paths: - results.json - report.html after_script: - | # Verstuur rapport naar Slack curl -X POST -H 'Content-type: application/json' --data "$(cat report_payload.json)" $SLACK_WEBHOOK_URL ``` Daarnaast moet je een `test_script.js` maken voor k6 die de performance tests uitvoert en de metriek verzamelt. Bijvoorbeeld: ```javascript import http from 'k6/http'; import { check } from 'k6'; export let options = { vus: 10, duration: '30s', thresholds: { 'http_req_duration': ['p(95)<200'], // 95% responses onder 200ms }, }; export default function () { let res = http.get('http://your-microservice/endpoint'); check(res, { 'status is 200': (r) => r.status === 200, }); } ``` En een `analyze_results.js` script dat de resultaten evalueert en rapporteert: ```javascript const fs = require('fs'); const data = JSON.parse(fs.readFileSync('results.json', 'utf8')); // Controleer gemiddelde responstijd const httpReqDuration = data.metrics['http_req_duration']; const avgRespTime = httpReqDuration?.avg; const maxCPU = data.metrics['cpu_usage']?.max; // Als CPU gebruik wordt gemeten let alerts = []; if (avgRespTime && avgRespTime > 200) { alerts.push(`Gemiddelde responstijd is te hoog: ${avgRespTime} ms`); } if (maxCPU && maxCPU > 70) { alerts.push(`CPU-gebruik is te hoog: ${maxCPU}%`); } // Maak rapport const report = ` Performance Test Resultaten: - Gemiddelde responstijd: ${avgRespTime} ms - Max CPU-gebruik: ${maxCPU} % `; // Verstuur rapport const payload = { text: alerts.length > 0 ? alerts.join('\n') : 'Performance doelen gehaald! 🎉', attachments: [ { title: "Test Rapport", text: report, } ] }; fs.writeFileSync('report_payload.json', JSON.stringify(payload)); ``` **Opmerkingen:** - Pas de URL's en scripts aan je eigen infrastructuur aan. - Zorg dat je de juiste metrics verzamelt en verwerkt. - Voeg eventueel extra checks toe voor CPU-gebruik als je dat met k6 of externe tools meet. - Test de pipeline en pas waar nodig. Met deze opzet wordt na elke build automatisch een performance test uitgevoerd, met rapportage en controle op de gestelde doelen binnen de tijdslimiet van 10 minuten.
provider: deepseek
model: deepseek-chat
Hier is een voorgestelde GitLab CI-configuratie voor jouw Node.js microservices project met geautomatiseerde performance tests met k6: ```yaml stages: - build - test - performance variables: K6_DURATION: "10m" # Maximale testduur build_job: stage: build script: - npm install - npm run build artifacts: paths: - dist/ expire_in: 1 hour test_job: stage: test script: - npm test performance_test: stage: performance image: grafana/k6:latest script: - | k6 run --out json=test_results.json \ --vus 10 \ --duration $K6_DURATION \ --http-debug="full" \ --summary-trend-stats="avg,min,med,max,p(90),p(95)" \ script.js artifacts: paths: - test_results.json reports: junit: test_results.json allow_failure: false rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH performance_validation: stage: performance image: node:18 script: - | # Valideer performance metrics npm install -g jq AVG_RESPONSE_TIME=$(jq '.metrics.http_req_duration.avg' test_results.json) MAX_CPU=70 echo "Gemiddelde responstijd: ${AVG_RESPONSE_TIME}ms" echo "Doel: < 200ms" if (( $(echo "$AVG_RESPONSE_TIME > 200" | bc -l) )); then echo "FOUT: Gemiddelde responstijd overschrijdt 200ms" exit 1 fi echo "✓ Performance doelen behaald" needs: ["performance_test"] # Slack notificatie notify_slack: stage: .post image: curlimages/curl:latest script: - | curl -X POST -H 'Content-type: application/json' \ --data "{ \"text\":\"Performance test voltooid voor $CI_PROJECT_NAME\nBranch: $CI_COMMIT_REF_NAME\nPipeline: $CI_PIPELINE_URL\nResultaat: $CI_JOB_STATUS\" }" \ $SLACK_WEBHOOK_URL when: always needs: [] ``` **Aanvullende bestanden die je nodig hebt:** 1. **k6 test script (script.js):** ```javascript import http from 'k6/http'; import { check, sleep } from 'k6'; export const options = { thresholds: { http_req_duration: ['avg < 200'], // Gemiddelde responstijd < 200ms http_req_failed: ['rate<0.01'], // Minder dan 1% fouten }, }; export default function () { const response = http.get('https://jouw-api-endpoint.nl/api/test'); check(response, { 'status is 200': (r) => r.status === 200, 'response time OK': (r) => r.timings.duration < 200, }); sleep(1); } ``` 2. **Omgevingsvariabelen in GitLab:** - `SLACK_WEBHOOK_URL`: Jouw Slack webhook URL voor notificaties **Belangrijke aanpassingen voor jouw project:** 1. **Build commando's aangepast** van Maven naar npm voor Node.js 2. **Performance stage toegevoegd** na de test fase 3. **k6 Docker image** voor de performance tests 4. **Automatische validatie** van de performance doelen 5. **Slack notificaties** bij voltooiing 6. **Artefacten** voor testresultaten **Installatie stappen:** 1. Voeg de k6 test script toe aan je repository 2. Configureer de Slack webhook in GitLab CI/CD variabelen 3. Pas de API endpoints aan in het k6 script 4. Stel de juiste testparameters in (VUs, duration) De pipeline zal nu automatisch performance tests uitvoeren en rapporteren via Slack binnen de gestelde tijdslimiet van 10 minuten.