test(charge): mesure l'API sous charge avec k6
Aucun garde-fou de performance n'existait, et le dépôt ne chiffrait aucun temps de réponse. tests/load, quatre scénarios : - smoke : une minute sur chaque route de lecture, joué à chaque PR ; - charge : 50 utilisateurs, 40 sur le tableau de bord au rythme de son rafraîchissement, 10 qui explorent les sites ; - stress : débit croissant jusqu'à la rupture, arrêt au-delà de 10 % d'erreurs ; - limitation-debit : par le proxy, vérifie que nginx répond 429 et jamais 5xx. Seuils : p95 < 500 ms et p99 < 1 s sur les lectures, moins de 1 % d'échecs. k6 tourne en service Compose (profil load) sur le réseau du projet : il vise backend:8000 et mesure l'API plutôt que la limite de 20 req/s par adresse de nginx. Chaque tir écrit un rapport HTML, une synthèse Markdown et le JSON brut dans tests/load/results. make load-smoke, load-test, load-stress et load-limits ; le job E2E enchaîne le smoke et le test de limitation après Playwright. Closes #47
This commit is contained in:
@@ -193,6 +193,23 @@ services:
|
||||
airflow-init:
|
||||
condition: service_completed_successfully
|
||||
|
||||
# Pourquoi : sur le réseau du projet, k6 joint `backend:8000` sans passer par nginx, dont la
|
||||
# limite par adresse (20 req/s) fausserait la mesure de l'API. `make load-*` le lance (ADR 0015).
|
||||
k6:
|
||||
image: grafana/k6:2.3.0
|
||||
profiles: ["load"]
|
||||
volumes:
|
||||
- ./tests/load:/scripts:ro
|
||||
- ./tests/load/results:/results
|
||||
environment:
|
||||
K6_BASE_URL: ${K6_BASE_URL:-http://backend:8000}
|
||||
K6_PROXY_URL: ${K6_PROXY_URL:-https://proxy}
|
||||
K6_EMAIL: ${K6_EMAIL:-}
|
||||
K6_PASSWORD: ${K6_PASSWORD:-}
|
||||
K6_RESUME: ${K6_RESUME:-}
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
airflow_logs:
|
||||
|
||||
Reference in New Issue
Block a user