performance tests-de-charge ci-cd
Bonnes Pratiques des Tests de Charge : Du Script à la Production
Publié le 5 mars 2026 · par PerfBlog Team
L’Art des Tests de Charge
Les tests de charge ne consistent pas seulement à envoyer du trafic vers votre application. Il s’agit de simuler la réalité pour découvrir les problèmes de performance avant vos utilisateurs.
Concevoir des Scénarios Efficaces
Pensez comme vos Utilisateurs
Un bon test de charge reflète le comportement réel des utilisateurs :
// Exemple k6 : scénario utilisateur réaliste
import http from 'k6/http';
import { sleep, check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 }, // montée en charge
{ duration: '5m', target: 50 }, // état stable
{ duration: '2m', target: 100 }, // pic de charge
{ duration: '5m', target: 100 }, // pic soutenu
{ duration: '2m', target: 0 }, // descente
],
thresholds: {
http_req_duration: ['p(95)<500'],
http_req_failed: ['rate<0.01'],
},
};
export default function () {
// Parcourir la page d'accueil
let res = http.get('https://app.exemple.com/');
check(res, { 'accueil status 200': (r) => r.status === 200 });
sleep(Math.random() * 3 + 1); // temps de réflexion
// Rechercher un produit
res = http.get('https://app.exemple.com/api/search?q=laptop');
check(res, { 'recherche status 200': (r) => r.status === 200 });
sleep(Math.random() * 2 + 1);
// Consulter les détails du produit
res = http.get('https://app.exemple.com/api/products/123');
check(res, { 'produit status 200': (r) => r.status === 200 });
sleep(Math.random() * 5 + 2);
}
Le Pattern de Montée en Charge
Ne frappez jamais votre système avec la charge complète instantanément. Utilisez toujours une montée progressive :
- Phase d’échauffement (2-5 min) : Remplissage des caches, établissement des connexions
- Montée en charge (2-5 min) : Augmentation progressive vers la charge cible
- État stable (5-15 min) : Maintien de la charge constante
- Pic (5-10 min) : Montée vers le pic attendu
- Descente (2-5 min) : Diminution progressive
Analyser les Résultats
Indicateurs Clés de Problèmes
- Temps de réponse augmentant linéairement avec la charge = goulot de ressources
- Pic soudain d’erreurs à une charge spécifique = limite de capacité atteinte
- Temps de réponse croissant dans le temps à charge constante = fuite mémoire
- Forte variance des temps de réponse = performance inconsistante
Percentiles de Temps de Réponse
Ne vous fiez pas aux moyennes. Utilisez les percentiles :
| Percentile | Ce qu’il vous dit |
|---|---|
| p50 (médiane) | Expérience utilisateur typique |
| p90 | Pire cas pour la plupart des utilisateurs |
| p95 | Seuil critique pour les SLA |
| p99 | Problèmes de latence en queue |
Intégration CI/CD
Intégrez les tests de performance dans votre pipeline :
# Exemple GitHub Actions
performance-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Lancer le test de charge k6
uses: grafana/k6-action@v0.3.1
with:
filename: tests/load-test.js
flags: --out json=results.json
- name: Vérifier les seuils
run: |
if grep -q '"thresholds":.*"failed":true' results.json; then
echo "Seuils de performance dépassés !"
exit 1
fi
Erreurs Courantes à Éviter
- Tester depuis la même machine - Utilisez la génération de charge distribuée
- Ignorer les temps de réflexion - Les vrais utilisateurs pausent entre les actions
- Ne pas monitorer côté serveur - CPU, mémoire, connexions DB comptent
- Tester uniquement les cas nominaux - Incluez les scénarios d’erreur
- Exécuter une seule fois - Toujours lancer plusieurs itérations pour des données fiables
Conclusion
Les tests de charge sont une compétence qui s’améliore avec la pratique. Commencez avec des scénarios simples, ajoutez progressivement de la complexité, et reliez toujours les résultats aux exigences métier.