1. Pourquoi tester la charge ? #
Découvrir les limites avant les utilisateurs.
Les questions auxquelles répond un test #
- Le service tient-il le trafic attendu avec la latence promise (SLO) ?
- Où se situe le point de rupture, et comment le service casse-t-il (lentement, brutalement) ?
- Une nouvelle version est-elle plus lente que la précédente ?
- La mise à l'échelle automatique réagit-elle assez vite ?
À savoir : Un test de charge n'a de valeur que s'il est observé : métriques, traces et profils du système testé expliquent ce que le test mesure. C'est pourquoi cette formation relie k6 à Prometheus et Grafana.
2. Les types de tests #
Une même base de script, plusieurs profils de charge.
Panorama #
| Type | Objectif | Durée typique |
|---|---|---|
| Smoke | Vérifier que le script et le service fonctionnent (1 à 5 utilisateurs) | 1 min |
| Charge moyenne (load) | Valider le comportement sous trafic normal | 15 à 60 min |
| Stress | Observer le comportement au-delà du trafic normal | 15 à 60 min |
| Pic (spike) | Encaisser une hausse brutale (soldes, annonce) | Quelques minutes |
| Endurance (soak) | Détecter fuites mémoire et dégradations lentes | Plusieurs heures |
| Point de rupture (breakpoint) | Trouver la capacité maximale | Jusqu'à la rupture |
3. Pourquoi k6 ? #
Un outil pensé pour les développeurs.
Atouts #
| Caractéristique | Détail |
|---|---|
| Scripts en JavaScript / TypeScript | Versionnés avec le code, relus en pull request |
| Moteur en Go | Des milliers d'utilisateurs virtuels sur une seule machine |
| Seuils (thresholds) | Le test échoue automatiquement si un objectif n'est pas atteint : idéal en CI |
| Sorties multiples | Prometheus, OpenTelemetry, JSON, CSV, Grafana Cloud |
| Protocoles | HTTP, WebSocket, gRPC, navigateur réel (module browser) et extensions (Kafka, SQL...) |
# Installation
brew install k6 # macOS
sudo apt install k6 # Debian/Ubuntu (dépôt k6)
docker run --rm -i grafana/k6 run - < script.js # sans installationÀ savoir : k6 est open source (AGPLv3), maintenu par Grafana Labs. La version 1.0, publiée en 2025, a stabilisé l'API et apporté la prise en charge native de TypeScript.
