Skip to content
Learni
Voir tous les tutoriels
Tests & Qualité

Comment effectuer des tests de charge avec k6 en 2026

14 minINTERMEDIATE
Read in English

Introduction

Les tests de charge sont essentiels pour garantir que vos applications restent performantes sous pression. En 2026, les outils modernes comme k6 permettent d'écrire des scripts maintenables et d'obtenir des métriques précises rapidement. Ce tutoriel intermédiaire vous apprend à créer des scénarios réalistes, définir des seuils stricts et intégrer les tests dans votre pipeline CI. Vous découvrirez comment simuler des utilisateurs virtuels, mesurer les temps de réponse et détecter les goulots d'étranglement avant qu'ils n'impactent vos utilisateurs réels.

Prérequis

  • Node.js 20+ et npm
  • Connaissances de base en JavaScript/TypeScript
  • Une API REST à tester (ex: localhost:3000)
  • k6 installé localement

Installation de k6

terminal
curl -L https://github.com/grafana/k6/releases/download/v0.57.0/k6-v0.57.0-linux-amd64.tar.gz | tar xvz
sudo mv k6 /usr/local/bin/
k6 version

Cette commande télécharge et installe la dernière version stable de k6. Vérifiez toujours la version pour bénéficier des dernières optimisations et correctifs de sécurité.

Script de test basique

load-test.js
import http from 'k6/http';
import { sleep, check } from 'k6';

export default function () {
  const res = http.get('http://localhost:3000/api/users');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
  sleep(1);
}

Ce script envoie une requête GET et vérifie le statut et le temps de réponse. Les checks permettent d'échouer le test si les critères ne sont pas respectés.

Configuration des options

load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 20 },
    { duration: '1m', target: 50 },
    { duration: '30s', target: 0 },
  ],
  thresholds: {
    http_req_duration: ['p(95)<250'],
    http_req_failed: ['rate<0.01'],
  },
};

export default function () {
  const res = http.get('http://localhost:3000/api/users');
  check(res, { 'status 200': (r) => r.status === 200 });
  sleep(1);
}

Les stages définissent la charge progressive. Les thresholds font échouer le test automatiquement si les performances ne sont pas atteintes.

Exécution du test

terminal
k6 run --out json=results.json load-test.js

Cette commande exécute le test et exporte les résultats au format JSON pour analyse ultérieure ou intégration dans des dashboards.

Scénario avec plusieurs endpoints

advanced-test.js
import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
  http.get('http://localhost:3000/api/users');
  sleep(0.5);
  http.post('http://localhost:3000/api/users', JSON.stringify({ name: 'Test' }), {
    headers: { 'Content-Type': 'application/json' },
  });
  sleep(1);
}

Ce script simule un parcours utilisateur réaliste en enchaînant plusieurs requêtes. Adaptez les endpoints selon votre application réelle.

Bonnes pratiques

  • Toujours définir des seuils stricts sur p(95) et taux d'erreur
  • Utiliser des données dynamiques pour éviter le cache
  • Exécuter les tests dans un environnement proche de la production
  • Versionner les scripts de test comme du code applicatif
  • Analyser les résultats avec des outils comme Grafana

Erreurs courantes à éviter

  • Oublier de configurer les thresholds, ce qui rend les tests inutiles
  • Utiliser des IPs fixes qui déclenchent le rate limiting
  • Ignorer les erreurs réseau dans les checks
  • Ne pas nettoyer les données de test après exécution

Pour aller plus loin

Intégrez k6 dans GitHub Actions et explorez les extensions pour tests distribués. Découvrez nos formations Learni pour approfondir les tests de performance.