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
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 versionCette 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
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
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
k6 run --out json=results.json load-test.jsCette 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
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.