Le WordPress d'aujourd'hui, décodé pour les développeurs

Tests

Faire échouer votre pipeline quand un test de charge dépasse un seuil fixé

Un test de charge exécuté sans conséquence sur le résultat de la pipeline ne protège personne. Comment transformer des seuils de latence et d'erreur en condition d'échec explicite.

Par Clément Hadrot • 17 novembre 2025 • 4 min de lecture • Aucun commentaire
Faire échouer votre pipeline quand un test de charge dépasse un seuil fixé

Zéro. C’est le nombre de fois où le test de charge exécuté chaque semaine sur la plateforme de réservation d’ateliers avait fait échouer la pipeline d’intégration continue depuis sa mise en place quatorze mois plus tôt, alors même que trois incidents de lenteur en production avaient été constatés sur cette même période. Le test tournait, produisait un rapport détaillé, personne ne le consultait systématiquement, et aucun seuil ne conditionnait le résultat de la pipeline à ce rapport.

Un test de charge purement informatif finit toujours par ce même sort : consulté quand tout va mal, ignoré le reste du temps. Le transformer en condition d’échec explicite change radicalement son utilité, à condition de choisir des seuils qui reflètent réellement ce que l’activité peut tolérer.

Pourquoi un rapport sans seuil ne protège personne

Un rapport de test de charge affiche des chiffres : temps de réponse moyen, temps de réponse au quatre-vingt-quinzième centile, taux d’erreur. Sans seuil défini à l’avance, interpréter ces chiffres devient une tâche subjective, réalisée différemment selon la personne qui consulte le rapport et selon son humeur du jour. Un seuil transforme cette interprétation en une décision automatique et reproductible.

Définir les seuils dans le script de test lui-même

Avec k6, les seuils se déclarent directement dans la configuration du scénario, sous la forme de conditions vérifiées automatiquement à la fin de l’exécution :

export const options = {
  scenarios: {
    reservation_atelier: {
      executor: 'ramping-vus',
      startVUs: 0,
      stages: [
        { duration: '2m', target: 50 },
        { duration: '5m', target: 50 },
        { duration: '2m', target: 0 },
      ],
    },
  },
  thresholds: {
    http_req_duration: ['p(95)<800'],
    http_req_failed: ['rate<0.01'],
  },
};

Si le temps de réponse au quatre-vingt-quinzième centile dépasse huit cents millisecondes, ou si le taux d’erreur dépasse un pour cent, k6 retourne un code de sortie non nul, ce qui suffit à faire échouer l’étape correspondante dans la pipeline.

Intégrer le résultat à la pipeline sans étape supplémentaire lourde

test-charge:
  script:
    - k6 run scenario-reservation.js
  allow_failure: false
L'essentiel à retenir : Passer d'un test de charge informatif à un test de charge bloquant ; Fixer des seuils différents selon la criticité de chaque route testée ; Distinguer un dépassement ponctuel d'une dérive confirmée sur plusieurs exécutions

Fixer des seuils différents selon la criticité de chaque route

Appliquer un seuil unique à l’ensemble des routes testées ignore une réalité simple : une route de consultation du catalogue d’ateliers peut tolérer un temps de réponse plus long qu’une route de confirmation de paiement, dont la lenteur affecte directement le taux de conversion. Les seuils se déclinent donc route par route :

RouteSeuil de latence (p95)Seuil de taux d’erreur
Consultation du catalogue1 500 ms2 %
Ajout d’un atelier au panier1 000 ms1 %
Confirmation de paiement800 ms0,5 %

Distinguer un dépassement ponctuel d’une dérive confirmée

Un test de charge bloquant sans nuance risque de faire échouer la pipeline pour un dépassement isolé, par exemple si l’infrastructure de test partage temporairement ses ressources avec un autre traitement inhabituel. La règle adoptée exige deux exécutions consécutives au-dessus du seuil avant de bloquer réellement le déploiement, tout en conservant une alerte visible dès le premier dépassement :

  • Premier dépassement : alerte envoyée à l’équipe, pipeline non bloquée, exécution du test répétée immédiatement.
  • Second dépassement consécutif : pipeline bloquée, déploiement suspendu jusqu’à investigation.
  • Historique conservé sur plusieurs semaines pour repérer une dérive progressive même sans dépassement franc du seuil.

Un seuil trop strict finit contourné à la première fausse alerte ; un seuil trop lâche finit ignoré comme le rapport qu’il remplace. Le bon seuil est celui que l’équipe accepte de respecter sans discuter à chaque fois.

En résumé

Un test de charge qui ne conditionne aucun résultat reste un exercice de mesure sans conséquence, redécouvert seulement après un incident. En fixant des seuils différenciés selon la criticité de chaque route et en exigeant une confirmation avant de bloquer réellement la pipeline, le test de charge retrouve son rôle initial : empêcher qu’une dégradation de performance n’atteigne la production plutôt que la constater après coup.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi