Content slides
Introduction à k6¶
Grafana k6 est un outil de test de charge moderne, conçu pour les développeurs et les SRE
- Performance : Écrit en Go, il est extrêmement léger et performant (comparé à JMeter)
- Scriptable : Scénarios écrits en JavaScript (ES6)
- Automatisation : Pensé pour être intégré nativement dans les pipelines CI/CD
- Protocoles : Supporte HTTP, WebSockets, gRPC et plus
Pourquoi Grafana k6 ?¶
- Scalabilité : Simule des milliers d'utilisateurs virtuels (VUs) avec peu de ressources (CPU/RAM)
- Thresholds (SLOs) : Permet de faire échouer un build si les performances ne sont pas atteintes
- Observabilité : Envoi natif des métriques vers InfluxDB, Prometheus ou Grafana Cloud
- Écosystème : Nombreuses extensions (Kafka, Redis, Kubernetes)
- Expérience Dev : Pas d'interface graphique lourde, tout se fait en code
Profils de charge (Stages)¶
Dans la réalité, la charge n'est jamais constante. On utilise des stages pour simuler des scénarios réalistes :
export const options = {
stages: [
{ duration: '1m', target: 20 }, // Montée en charge progressive (Ramp-up)
{ duration: '3m', target: 20 }, // Plateau de charge nominale
{ duration: '1m', target: 0 }, // Descente en charge (Ramp-down)
],
thresholds: {
http_req_duration: ['p(95)<500'],
},
}
- Permet de tester la réactivité de l'Auto-scaling (HPA)
- Identifie comment le système récupère après un pic de trafic
Stratégies de Tests¶
- Smoke Test : Vérifier que le script fonctionne (1 VU)
- Load Test : Vérifier les performances sous une charge normale
- Stress Test : Augmenter la charge jusqu'à trouver le point de rupture
- Soak Test : Tester la stabilité sur plusieurs heures (détection de fuites mémoire)
- Spike Test : Simuler une arrivée massive et soudaine d'utilisateurs
Intégration dans GitLab CI¶
Automatiser le test de charge à chaque déploiement en staging :
load_test:
stage: test
image:
name: grafana/k6:latest
entrypoint: [""]
script:
# Le build échouera si les thresholds ne sont pas respectés
- k6 run --summary-export=report.json tests/load-test.js
artifacts:
when: always
paths:
- report.json
expire_in: 1 week
Analyse SRE des Résultats¶
Ne vous fiez pas à la moyenne, regardez les Percentiles :
- P95 / P99 : Représente l'expérience des utilisateurs les plus mal lotis (la "longue traîne")
- Knee Point : Moment où le temps de réponse décolle verticalement (saturation)
- Checks vs Thresholds :
- Checks : Vérifications booléennes (n'échouent pas le test)
- Thresholds : Critères de succès du job CI/CD (font échouer le pipeline)
Conclusion¶
- k6 transforme le test de charge en une étape de CI standard
- Les Thresholds sont indispensables pour garantir les SLOs
- La visualisation via Grafana permet de corréler les tests avec les métriques système
- Un outil indispensable pour valider la scalabilité avant la production