veza/loadtests/README.md

117 lines
2.8 KiB
Markdown
Raw Normal View History

# 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
```