Introduction
Les tests de charge sont essentiels pour garantir que vos applications résistent à un trafic réel sans dégradation. En 2026, les outils comme k6 permettent de simuler des milliers d'utilisateurs virtuels avec un code JavaScript simple et puissant. Ce tutoriel vous guide à travers des scénarios experts incluant ramp-up progressif, seuils de performance stricts et métriques personnalisées. Vous apprendrez à identifier les goulots d'étranglement avant qu'ils n'impactent vos utilisateurs en production.
Prérequis
- Node.js 20+ et k6 installé
- Connaissances solides en JavaScript et HTTP
- Une application cible exposée (API REST ou frontend)
- Docker pour les tests distribués
- Accès à un environnement de test isolé
Installation et configuration de base
brew install k6
k6 version
mkdir load-tests && cd load-testsInstallation de k6 via Homebrew sur macOS. Vérifiez la version et créez un dossier dédié pour organiser vos scripts de test de charge.
Script de test basique avec ramp-up
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 500 },
{ duration: '2m', target: 0 },
],
thresholds: {
http_req_duration: ['p(95)<250'],
http_req_failed: ['rate<0.01'],
},
};
export default function () {
const res = http.get('https://votre-api.com/health');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}Ce script définit un ramp-up vers 500 VUs sur 9 minutes avec seuils stricts. Les checks valident les réponses et sleep simule le comportement utilisateur réel.
Scénario avancé avec métriques personnalisées
import http from 'k6/http';
import { Trend } from 'k6/metrics';
const apiLatency = new Trend('api_latency');
export const options = {
vus: 200,
duration: '10m',
};
export default function () {
const res = http.get('https://votre-api.com/users');
apiLatency.add(res.timings.duration);
if (res.status !== 200) {
console.error(`Erreur: ${res.status}`);
}
}Ajout d'une métrique personnalisée Trend pour suivre précisément la latence API. Utile pour des rapports détaillés et l'analyse des percentiles au-delà des seuils standards.
Test distribué avec Docker
FROM grafana/k6:latest
COPY . /scripts
WORKDIR /scripts
ENTRYPOINT ["k6", "run", "--out", "experimental-prometheus-rw", "advanced-metrics.js"]Créez une image Docker pour exécuter k6 en mode distribué. L'output vers Prometheus permet une visualisation temps réel et l'agrégation de métriques sur plusieurs nœuds.
Intégration dans une pipeline CI/CD
name: Load Test
on: [push]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6
uses: grafana/k6-action@v0.3.0
with:
filename: advanced-metrics.js
flags: --vus 100 --duration 5mIntégrez les tests de charge dans GitHub Actions. Le workflow s'exécute automatiquement sur chaque push et échoue si les seuils ne sont pas respectés.
Bonnes pratiques
- Définissez toujours des seuils stricts (p95, taux d'erreur) et faites échouer le build en cas de non-respect
- Utilisez des données dynamiques et des variables d'environnement pour éviter le caching
- Exécutez les tests sur un environnement identique à la production
- Analysez les traces avec Prometheus/Grafana plutôt que les logs bruts
- Limitez la durée des tests à 10-15 minutes pour les tests de pic
Erreurs courantes à éviter
- Oublier de valider les réponses HTTP (status 200 uniquement) conduit à des faux positifs
- Utiliser trop de VUs sans ramp-up provoque un pic artificiel et des timeouts
- Ignorer les métriques de latence réseau et se concentrer uniquement sur le temps de réponse serveur
- Ne pas isoler l'environnement de test, ce qui fausse les résultats à cause d'autres processus
Pour aller plus loin
Approfondissez vos compétences avec nos formations avancées sur la performance et les tests de charge. Découvrez nos formations Learni.