feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
# 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
|
|
|
|
|
|
2026-03-02 18:22:38 +00:00
|
|
|
# Uploads (AUTH_TOKEN optionnel — setup crée des users si absent)
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
AUTH_TOKEN=xxx k6 run loadtests/backend/uploads.js
|
2026-03-02 18:22:38 +00:00
|
|
|
# v0.951: 50 uploads concurrents pendant 2 min
|
|
|
|
|
k6 run loadtests/backend/uploads.js
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
|
|
|
|
|
# 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
|
2026-03-02 18:22:38 +00:00
|
|
|
|
|
|
|
|
# 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
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 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
|
2026-03-02 18:22:38 +00:00
|
|
|
|
|
|
|
|
# Stress test 1000 WebSocket concurrent (v0.951)
|
|
|
|
|
# Prérequis: Backend + Chat server, mémoire serveur < 2GB
|
|
|
|
|
k6 run loadtests/chat/stress_1000ws.js
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 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
|
2026-03-02 18:22:38 +00:00
|
|
|
│ ├── full.js
|
|
|
|
|
│ └── stress_500rps.js
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
├── stream/
|
|
|
|
|
│ └── http.js
|
|
|
|
|
└── chat/
|
2026-03-02 18:22:38 +00:00
|
|
|
├── websocket.js
|
|
|
|
|
└── stress_1000ws.js
|
feat(loadtests): audit 3.2 — tests de charge k6 complets
- loadtests: centraliser scripts (backend, stream, chat)
- backend: health, auth, tracks, uploads, playlists, marketplace
- stream: http health, healthz, readyz
- chat: WebSocket load (register -> login -> chat token -> WS)
- ci: workflow nightly load-test-nightly.yml
- docs: README loadtests
- make: load-test-smoke, load-test-backend, load-test-all
- fix: veza-backend-api Makefile load-test (scripts/load_test_uploads.js -> loadtests)
2026-02-15 14:22:48 +00:00
|
|
|
```
|