# 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 (requiert AUTH_TOKEN) AUTH_TOKEN=xxx 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 ``` ### 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 ``` ## 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 ├── stream/ │ └── http.js └── chat/ └── websocket.js ```