# Load Tests (k6) Tests de charge pour la plateforme Veza. Audit 3.2. ## Prérequis - [k6](https://k6.io/docs/getting-started/installation/) installé (`brew install k6` ou `sudo apt install k6`) ## Variables d'environnement | Variable | Défaut | Description | |----------|--------|-------------| | `BASE_URL` | `http://localhost:8080` | URL de l'API backend | | `API_ORIGIN` | idem | Alias pour BASE_URL | | `STREAM_ORIGIN` | `http://localhost:8082` | URL du stream server | | `CHAT_ORIGIN` | `ws://localhost:8081` | URL WebSocket du chat server | | `AUTH_TOKEN` | (vide) | JWT pour tests upload (optionnel) | ## Exécution locale ### Smoke test (validation rapide, ~30s) ```bash k6 run loadtests/smoke.js ``` ### Backend API ```bash # Health, readyz, status k6 run loadtests/backend/health.js # Auth (register, login, /me, refresh) k6 run loadtests/backend/auth.js # Tracks (liste, search, détail) k6 run loadtests/backend/tracks.js # Uploads (AUTH_TOKEN optionnel — setup crée des users si absent) AUTH_TOKEN=xxx k6 run loadtests/backend/uploads.js # v0.951: 50 uploads concurrents pendant 2 min k6 run loadtests/backend/uploads.js # Playlists k6 run loadtests/backend/playlists.js # Marketplace k6 run loadtests/backend/marketplace.js # Scénario combiné (health, auth, tracks, playlists, marketplace) k6 run loadtests/backend/full.js # Stress test 500 req/s (v0.951) — login, tracks, search, products # Seuils: P99 < 500ms, 500 VUs ramp 0→100→250→500 sur 3 min, maintien 2 min k6 run loadtests/backend/stress_500rps.js # Avec rapport JSON: k6 run --out json=report.json loadtests/backend/stress_500rps.js ``` ### Stream server ```bash # Health, healthz, readyz (stream server doit tourner) k6 run loadtests/stream/http.js ``` ### Chat WebSocket ```bash # Backend API + Chat server requis k6 run loadtests/chat/websocket.js # Stress test 1000 WebSocket concurrent (v0.951) # Prérequis: Backend + Chat server, mémoire serveur < 2GB k6 run loadtests/chat/stress_1000ws.js ``` ## Docker ```bash docker run --rm -i --network=host \ -v $(pwd)/loadtests:/scripts \ -e BASE_URL=http://localhost:8080 \ grafana/k6 run /scripts/smoke.js ``` ## CI Le workflow `.github/workflows/load-test-nightly.yml` s'exécute : - **Schedule** : 2h UTC chaque nuit - **Manual** : `workflow_dispatch` Il lance smoke + backend full, puis uploade les résultats en artifact. ## Structure ``` loadtests/ ├── README.md ├── config.js ├── smoke.js ├── backend/ │ ├── health.js │ ├── auth.js │ ├── tracks.js │ ├── uploads.js │ ├── playlists.js │ ├── marketplace.js │ ├── full.js │ └── stress_500rps.js ├── stream/ │ └── http.js └── chat/ ├── websocket.js └── stress_1000ws.js ```