Aller au contenu

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

☕️ Si tu souhaites soutenir mon travail, tu peux m'offrir un café ici.