- 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)
102 lines
2.2 KiB
Markdown
102 lines
2.2 KiB
Markdown
# 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
|
|
```
|