1. Les métriques intégrées #
Ce que mesure k6.
Principales métriques #
| Métrique | Type | Signification |
|---|---|---|
http_req_duration | Trend | Durée totale de la requête (envoi + attente + réception) |
http_req_waiting | Trend | Temps jusqu'au premier octet (TTFB) |
http_req_failed | Rate | Part des requêtes en échec (par défaut : statut hors 200-399) |
http_reqs | Counter | Nombre de requêtes |
iterations, iteration_duration | Counter, Trend | Itérations du scénario |
vus, vus_max | Gauge | Utilisateurs virtuels actifs |
checks | Rate | Part des vérifications réussies |
dropped_iterations | Counter | Itérations non lancées faute de VU (modèle ouvert) |
Erreur Courante : Sidropped_iterationsest non nul, k6 n'a pas pu générer la charge demandée : augmentezmaxVUsou la machine de test, sinon le résultat est faussé.
2. Les seuils #
Le test réussit ou échoue.
Définir des seuils #
export const options = {
thresholds: {
http_req_failed: ['rate<0.01'], // moins de 1 % d'erreurs
http_req_duration: ['p(95)<300', 'p(99)<800'], // 95 % sous 300 ms
'http_req_duration{name:commande}': ['p(95)<500'], // seuil sur un tag
checks: ['rate>0.99'],
http_reqs: [{ threshold: 'count>1000', abortOnFail: false }],
'http_req_duration{scenario:api}': [{ threshold: 'p(99)<1000', abortOnFail: true, delayAbortEval: '30s' }],
},
};Si un seuil n'est pas respecté, k6 se termine avec le code de sortie 99 : la CI marque l'étape en échec.
Bonne Pratique : Alignez les seuils sur vos SLO (voir la formation SRE) : un test de charge devient alors la preuve qu'une version tient ses objectifs.
3. Métriques personnalisées #
Mesurer ce qui compte pour le métier.
Les quatre types #
import { Trend, Counter, Rate, Gauge } from 'k6/metrics';
const dureeCommande = new Trend('duree_commande', true); // true = durée
const commandes = new Counter('commandes');
const paiementsRefuses = new Rate('paiements_refuses');
export const options = { thresholds: { paiements_refuses: ['rate<0.05'], duree_commande: ['p(95)<2000'] } };
export default function () {
const debut = Date.now();
const res = http.post('http://api/commande', '{}');
dureeCommande.add(Date.now() - debut);
commandes.add(1);
paiementsRefuses.add(res.status === 402);
}Le résumé de fin de test #
k6 run --summary-trend-stats="avg,p(90),p(95),p(99),max" script.js
k6 run --summary-export=resume.json script.jsLa fonction handleSummary(data) permet de produire son propre rapport (HTML, JUnit, Markdown) à la fin du test.
