Faire des graphiques de résultats JMeter avec Gnuplot

JMeter est un bon outil de test de charges, mais la restitution des résultats sous forme de graphique est parfois indigeste en utilisant JMeter.

Je vous propose un moyen rapide et fiable pour générer un graphique des temps de réponses pour une transaction (soit un échantillon unitaire, soit un contrôleur de transaction qui regrouperait plusieurs échantillons (samplers))

Pour cela, j’utilise le programme de traçage de dessin/graphique GNUPLOT. Il est disponible sur les environnements Unix/Linux, également sous Windows (via Cygwin ou en natif) et même Mac.

Je ne vais pas expliquer comment l’installer, c’est simple. (avec Ubuntu, c’est juste « sudo apt-get install gnuplot »)

Tout d’abord, commençons par la transformation du fichier de résultats JMeter CSV en un fichier qui sera lisible par Gnuplot. Ce dernier voulant un fichier contenant des colonnes séparées par des tabulations.

Donc, voici la transformation à faire, ci-dessous, la ligne de mon fichier de résultat JMeter au format CSV :

"2008-07-23;11:19:30";5187;MON_TRANSACTION_CONTROLLER;200;"TG1;2-1";true;;144896;0

Nous allons garder seulement l’heure (2eme colonne) et le temps de réponse (3eme colonne), cela va donner :

11:19:30<tab> 5187

Pour faire cette transformation, plusieurs possibilités :

  • A la main, pour tous les résultats (je rigole)
  • En utilisant Excel ou Calc (ouverture du CSV, suppression des colonnes non voulues, enregistrement en TXT (texte séparé par des tabulations))
  • En programmant une petite moulinette (en Perl, etc..)
  • Ou en utilisant les commandes shell Unix

Pour ma part, j’ai choisi la commande shell Unix (en une seule ligne) :

grep "MON_TRANSACTION_CONTROLLER" jmeter-resultats.csv |  sed "s/\"//g" | awk -F ";" '{print $2,"\t",$3}' > DATA_MON_TRANSACTION_CONTROLLER.csv

C’est beau, une petite ligne. (Si vous avez Windows, utilisez l’environnement Cygwin) (explications : le grep extrait seulement les résultats de MON_TRANSACTION_CONTROLLER, le sed va remplacer les guillements [« ] par rien (il les enlèvent), puis le awk retrouve les colonnes du CSV avec le séparateur « ; » et awk imprime la colonne 2 et 3 avec une tabulation au milieu vers un fichier de sortie (via le >))

Bon, maintenant que le fichier de données est préparé pour Gnuplot, y-a-pu-qu’a….

Voici les commandes :

milamber:~/jmeter-data/GNUPLOT$ gnuplot

[…]

gnuplot> set xdata time

gnuplot> set timefmt « %H:%M:%S »

gnuplot> set format x « %H:%M »

gnuplot> plot ‘DATA_MON_TRANSACTION_CONTROLLER.csv’ using 1:2 with points pt 1 ps 0.5

Et hop, voici le résultat :

Graphique Résultats JMeter avec Gnuplot

On ajoute quelques lignes pour les légendes et titre, puis on re-dessine.

gnuplot> set title « Graphique des temps de réponses unitaire pour la Transaction »

gnuplot> set xlabel « Heure »

gnuplot> set ylabel « Temps de réponse (ms) »

gnuplot> replot

Et revoilà :

Graphique Résultats JMeter avec Gnuplot

Je n’explique pas le fonctionnement de Gnuplot (désolé), vous pouvez retrouver le rôle des commandes dans la documentation.

Pourquoi utiliser Gnuplot ?, notamment par rapport à Access (cf. ce tutorial) ou Excel ou Calc. Tout simplement, le jour où vous avez plus de 65535 lignes de résultats, ces outils de bureautiques ne savent plus faire de graphiques…

Bien entendu, ce billet n’est qu’un début sur le potentiel de Gnuplot pour aider à la restitution de résultats JMeter. Mais cela demande de préparer un peu plus les données. Par exemple, via une moulinette Perl, on peut facilement transformer ces temps ‘unitaires’ en temps moyen par minute, et générer le graphique sous forme de courbe.

Courbe de résultats JMeter avec Gnuplot

Via la commande gnuplot :

plot 'Sortie_DATA_MON_TRANSACTION_CONTROLLER.csv' using 1:2 with linespoints pt 1 ps 0.5

A vous de jouez un peu, bon courage

Mise à jour (27/10/2008) : J’ai oublié de donner ce lien vers cet article d’IBM developerWorks, ce dernier m’ayant inspiré ce billet…

./