Notions

Score Apdex : définition et méthode de calcul

7 min de lecture

Un score Apdex est un nombre entre 0 et 1 qui indique la part des requêtes assez rapides pour les personnes qui les attendent. Vous choisissez un temps cible T : les réponses jusqu’à T comptent entièrement, celles jusqu’à quatre fois T comptent pour moitié, et les plus lentes comptent zéro. Un résultat de 1 signifie que chaque requête a atteint la cible, et 0 que chacune était trop lente.

ZoneTemps de réponsePoids dans le score
Satisfait (satisfied)jusqu’à T1
Tolérant (tolerating)au-delà de T, jusqu’à 4T0,5
Frustré (frustrated)au-delà de 4T0

Les faits ci-dessous viennent de la documentation et du code source des outils, vérifiés le 19 octobre 2026.

Comment calculer un score Apdex ?

Additionnez les requêtes satisfaites et la moitié des requêtes tolérées, puis divisez par le total. Le résultat tombe toujours entre 0 et 1.

Apdex(T) = (satisfied + tolerating / 2) / total

La documentation Apdex de New Relic déroule un exemple avec T fixé à 500 ms : sur 200 requêtes, 170 se terminent en 500 ms au plus, 20 prennent entre 500 ms et 2 secondes, et 10 échouent ou prennent plus longtemps. Cela donne (170 + 20 / 2) / 200 = 0,90 (vérifié le 19 octobre 2026).

Un second exemple montre l’intérêt du score en test de charge. Une exécution envoie 10 000 requêtes avec T = 300 ms : 8 200 se terminent en 300 ms, 1 300 entre 300 ms et 1,2 seconde, et 500 prennent plus longtemps. L’Apdex vaut (8 200 + 650) / 10 000 = 0,885. La même exécution peut très bien afficher une moyenne de 280 ms, qui semble correcte seule et masque les 500 requêtes de plus d’une seconde.

D’où vient l’Apdex ?

Apdex, pour Application Performance Index, est un standard ouvert né d’un groupe d’entreprises, l’Apdex Alliance. Peter Sevcik, de NetForecast, a fondé l’Alliance en 2004.

L’article Wikipédia sur l’Apdex cite l’article de Sevcik de 2005 et donne la règle des 4T. L’Apdex Users Group indique aujourd’hui que les règles des seuils T et F « sont devenues flexibles » (vérifié le 19 octobre 2026), et les outils profitent de cette liberté.

Comment JMeter, Artillery et LoadFocus le calculent-ils ?

Tous trois partent de T = 500 ms. Ils diffèrent sur la fin de la zone tolérée et sur le sort des requêtes en échec, si bien qu’une même exécution peut donner trois valeurs un peu différentes.

OutilT par défautToléré jusqu’àRequêtes en échec
Tableau de bord HTML de JMeter500 ms1 500 mscomptées comme frustrées
Plugin apdex d’Artillery500 ms4T (2 000 ms)seules les réponses sont notées
Page de résultats LoadFocus500 ms, fixe4T (2 000 ms)classées selon le temps de réponse
New Relic APMréglé par application4Terreurs serveur frustrées

JMeter. Le rapport de tableau de bord contient un tableau APDEX par transaction. Ses valeurs par défaut sont jmeter.reportgenerator.apdex_satisfied_threshold=500 et apdex_tolerated_threshold=1500 : la zone tolérée s’arrête donc à 3T tant que vous n’y touchez pas, et apdex_per_transaction fixe des seuils propres à chaque sampler. Dans ApdexSummaryConsumer, un échantillon en échec s’ajoute au total et jamais aux satisfaits ou aux tolérés, donc chaque échec fait baisser le score (vérifié le 19 octobre 2026).

Artillery. Le plugin apdex ne fonctionne qu’avec le moteur HTTP et publie les compteurs apdex.satisfied, apdex.tolerated et apdex.frustrated. Son code dans artillery-plugin-apdex 1.24.0 classe chaque réponse selon son temps total par rapport à T et 4T, puis affiche le score avec une étiquette : excellent à partir de 0,94, good à partir de 0,85, fair à partir de 0,70, poor à partir de 0,49, unacceptable en dessous. Une requête qui ne reçoit jamais de réponse n’est jamais classée (vérifié le 19 octobre 2026). Notre revue d’Artillery présente l’outil lui-même.

LoadFocus, qui publie ce site, affiche le score Apdex dans l’onglet Insights d’un résultat de test de charge, à côté d’un histogramme des temps de réponse. T est fixé à 500 ms et la zone tolérée s’arrête à 2 000 ms ; T n’est pas modifiable. Chaque échantillon est classé selon son temps de réponse, et les parts satisfaite, tolérée et frustrée s’affichent à côté du score.

Comment choisir le seuil T ?

Choisissez T d’après ce qu’attendent les utilisateurs de cette page ou de cet endpoint, et réglez-le par transaction quand votre outil le permet. Un seul T pour toute une application mélange un endpoint de recherche rapide et un export de rapport lent dans un même chiffre.

Quelques règles pratiques :

  • Partez d’un objectif réel. Si vous avez déjà un objectif de latence comme « 95 % des appels de paiement sous 400 ms », T = 400 ms fait raconter la même histoire à l’Apdex et à l’objectif.
  • Gardez le même T d’une exécution à l’autre. Un Apdex ne se compare qu’à un Apdex mesuré au même T. Écrivez Apdex(0.4) ou « Apdex à T = 400 ms » pour éviter les comparaisons entre seuils différents.
  • Alignez aussi la zone tolérée. Le réglage par défaut de JMeter s’arrête à 3T et les autres à 4T. Avant de comparer un rapport JMeter avec un autre outil, réglez apdex_tolerated_threshold sur quatre fois T.
  • N’ajustez pas T pour faire passer une version. Déplacer T après une mauvaise exécution change la règle graduée, et la tendance que vous suiviez disparaît.

Qu’est-ce qu’un bon score Apdex ?

Le plugin d’Artillery qualifie de excellent 0,94 et plus, de good 0,85 à 0,94, et de poor ou pire tout ce qui passe sous 0,70. Ces étiquettes n’ont de sens que si T a été choisi honnêtement.

Un Apdex de 0,95 à T = 2 secondes peut décrire un service plus lent qu’un 0,80 à T = 200 ms. Quand vous fixez un critère de mise en production, écrivez le seuil et le score ensemble (« Apdex(0.5) d’au moins 0,9 ») et vérifiez-le à côté d’une limite de percentile, car les deux repèrent des problèmes différents.

Que cache l’Apdex ?

Il réduit toute la distribution des temps de réponse à trois cases, il ne peut donc pas dire à quel point les requêtes frustrées étaient lentes. Une requête à 2,1 secondes et une autre à 30 secondes font baisser le score exactement autant.

C’est pourquoi il fonctionne mieux accompagné d’autres chiffres :

  • Les percentiles montrent la lenteur des requêtes lentes. Notre guide sur la latence de queue explique pourquoi le 99e percentile compte dès qu’une page appelle plusieurs services.
  • Le taux d’erreur repère les échecs que votre outil ne note peut-être pas. Artillery ne note jamais les requêtes sans réponse et New Relic compte les erreurs serveur comme frustrées : lisez le nombre d’erreurs à part.
  • La taille de l’échantillon compte : New Relic précise que sous environ 100 requêtes par minute, le score est instable.
  • Le biais de mesure existe aussi. Un générateur de charge qui attend les réponses lentes envoie moins de requêtes pendant les périodes lentes, et l’Apdex paraît meilleur que la réalité ; voir la coordinated omission.

Comment utiliser l’Apdex dans un test de charge ?

Servez-vous-en comme résumé pour ceux qui ne liront pas un histogramme, et gardez la décision de réussite ou d’échec sur des limites explicites.

Une routine qui fonctionne :

  1. Fixez T pour chaque transaction clé d’après votre objectif de latence.
  2. Lancez le test et notez l’Apdex à ce T, ainsi que les 95e et 99e percentiles et le taux d’erreur.
  3. Comparez l’Apdex avec l’exécution précédente au même T. Une baisse de 0,93 à 0,86 est un signal clair, même pour quelqu’un d’extérieur à l’équipe.
  4. Faites échouer le build sur les limites de percentile et d’erreur, comme décrit dans notre guide sur les critères de réussite d’un test de charge, et publiez l’Apdex à côté.

FAQ

Un score Apdex plus élevé est-il meilleur ? Oui. 1,0 signifie que chaque requête s’est terminée en T au plus, et 0 que chacune a dépassé la limite tolérable ou a été comptée comme frustrée.

Quel est le seuil Apdex par défaut dans JMeter ? Le tableau de bord HTML utilise 500 ms pour satisfait et 1 500 ms pour toléré. Modifiez-les avec jmeter.reportgenerator.apdex_satisfied_threshold et apdex_tolerated_threshold.

L’Apdex tient-il compte des erreurs ? Cela dépend de l’outil. JMeter compte les échantillons en échec comme frustrés et New Relic fait de même avec les erreurs serveur, alors que le plugin d’Artillery ne note que les requêtes qui ont reçu une réponse.

Peut-on comparer les scores Apdex de deux outils ? Seulement si T, la limite tolérable et le traitement des erreurs sont identiques. Sinon, comparez plutôt les percentiles et les taux d’erreur sous-jacents.

À lire aussi


Les affirmations techniques de cet article n'ont pas été relues de façon indépendante.

LoadFocus team
Écrit par l'équipe LoadFocus, qui fait tourner un service de test de charge dans le cloud.