{"id":100,"date":"2008-10-26T23:24:57","date_gmt":"2008-10-26T22:24:57","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?p=100"},"modified":"2009-07-11T22:12:18","modified_gmt":"2009-07-11T21:12:18","slug":"faire-des-graphiques-de-resultats-jmeter-avec-gnuplot","status":"publish","type":"post","link":"https:\/\/blog.milamberspace.net\/index.php\/2008\/10\/26\/faire-des-graphiques-de-resultats-jmeter-avec-gnuplot-100.html","title":{"rendered":"Faire des graphiques de r\u00e9sultats JMeter avec Gnuplot"},"content":{"rendered":"<p style=\"\">JMeter est un bon outil de test de charges, mais la restitution des r\u00e9sultats sous forme de graphique est parfois indigeste en utilisant JMeter.<\/p>\n<p style=\"\">Je vous propose un moyen rapide et fiable pour g\u00e9n\u00e9rer un graphique des temps de r\u00e9ponses pour une transaction (soit un \u00e9chantillon unitaire, soit un contr\u00f4leur de transaction qui regrouperait plusieurs \u00e9chantillons (samplers))<\/p>\n<p style=\"\">Pour cela, j&rsquo;utilise le programme de tra\u00e7age de dessin\/graphique <a title=\"GNUPLOT\" href=\"http:\/\/www.gnuplot.info\" target=\"_blank\">GNUPLOT<\/a>. Il est disponible sur les environnements Unix\/Linux, \u00e9galement sous Windows (via Cygwin ou en natif) et m\u00eame Mac.<\/p>\n<p style=\"\">Je ne vais pas expliquer comment l&rsquo;installer, c&rsquo;est simple. <em>(avec Ubuntu, c&rsquo;est juste \u00ab sudo apt-get install gnuplot \u00bb)<\/em><\/p>\n<p style=\"\">Tout d&rsquo;abord, commen\u00e7ons par la transformation du fichier de r\u00e9sultats JMeter CSV en un fichier qui sera lisible par Gnuplot. Ce dernier voulant un fichier contenant des colonnes s\u00e9par\u00e9es par des tabulations.<!--more--><\/p>\n<p style=\"\">Donc, voici la transformation \u00e0 faire, ci-dessous, la ligne de mon fichier de r\u00e9sultat JMeter au format CSV :<\/p>\n<pre><strong>\"2008-07-23;11:19:30\";5187;MON_TRANSACTION_CONTROLLER;200;\"TG1;2-1\";true;;144896;0<\/strong><\/pre>\n<p style=\"\">Nous allons garder seulement l&rsquo;heure <em>(2eme colonne)<\/em> et le temps de r\u00e9ponse <em>(3eme colonne)<\/em>, cela va donner :<\/p>\n<pre><strong>11:19:30&lt;tab&gt; 5187<\/strong><\/pre>\n<p style=\"\">Pour faire cette transformation, plusieurs possibilit\u00e9s :<\/p>\n<ul>\n<li>A la main, pour tous les r\u00e9sultats <em>(je rigole)<\/em><\/li>\n<li>En utilisant Excel ou Calc (ouverture du CSV, suppression des colonnes non voulues, enregistrement en TXT (texte s\u00e9par\u00e9 par des tabulations))<\/li>\n<li>En programmant une petite moulinette (en Perl, etc..)<\/li>\n<li>Ou en utilisant les commandes shell Unix<\/li>\n<\/ul>\n<p style=\"\">Pour ma part, j&rsquo;ai choisi la commande shell Unix (en une seule ligne) :<\/p>\n<pre><strong>grep \"MON_TRANSACTION_CONTROLLER\" jmeter-resultats.csv |  sed \"s\/\\\"\/\/g\" | awk -F \";\" '{print $2,\"\\t\",$3}' &gt; DATA_MON_TRANSACTION_CONTROLLER.csv<\/strong><\/pre>\n<p style=\"\"><em>C&rsquo;est beau, une petite ligne. (Si vous avez Windows, utilisez l&rsquo;environnement Cygwin) (explications : le <strong>grep<\/strong> extrait seulement les r\u00e9sultats de MON_TRANSACTION_CONTROLLER, le <strong>sed<\/strong> va remplacer les guillements [\u00ab\u00a0] par rien (il les enl\u00e8vent),  puis le <strong>awk<\/strong> retrouve les colonnes du CSV avec le s\u00e9parateur \u00ab\u00a0;\u00a0\u00bb et <strong>awk<\/strong> imprime la colonne 2 et 3 avec une tabulation au milieu vers un fichier de sortie (<strong>via le &gt;<\/strong>))<br \/>\n<\/em><\/p>\n<p style=\"\">Bon, maintenant que le fichier de donn\u00e9es est pr\u00e9par\u00e9 pour Gnuplot, y-a-pu-qu&rsquo;a&#8230;.<\/p>\n<p style=\"\">Voici les commandes :<\/p>\n<p style=\"\">milamber:~\/jmeter-data\/GNUPLOT$ gnuplot<\/p>\n<p style=\"\">[&#8230;]<\/p>\n<p style=\"\">gnuplot&gt; set xdata time<\/p>\n<p style=\"\">gnuplot&gt; set timefmt \u00ab\u00a0%H:%M:%S\u00a0\u00bb<\/p>\n<p style=\"\">gnuplot&gt; set format x \u00ab\u00a0%H:%M\u00a0\u00bb<\/p>\n<p style=\"\">gnuplot&gt; plot &lsquo;DATA_MON_TRANSACTION_CONTROLLER.csv&rsquo; using 1:2 with points pt 1 ps 0.5<\/p>\n<p style=\"\">Et hop, voici le r\u00e9sultat :<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter10-img-gnuplot\/01-jmeter-gnuplot.png\" alt=\"Graphique R\u00e9sultats JMeter avec Gnuplot\" width=\"640\" height=\"423\" \/><\/p>\n<p style=\"\">On ajoute quelques lignes pour les l\u00e9gendes et titre, puis on re-dessine.<\/p>\n<p style=\"\">gnuplot&gt; set title \u00ab\u00a0Graphique des temps de r\u00e9ponses unitaire pour la Transaction\u00a0\u00bb<\/p>\n<p style=\"\">gnuplot&gt; set xlabel \u00ab\u00a0Heure\u00a0\u00bb<\/p>\n<p style=\"\">gnuplot&gt; set ylabel \u00ab\u00a0Temps de r\u00e9ponse (ms)\u00a0\u00bb<\/p>\n<p style=\"\">gnuplot&gt; replot<\/p>\n<p style=\"\">Et revoil\u00e0 :<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter10-img-gnuplot\/02-jmeter-gnuplot.png\" alt=\"Graphique R\u00e9sultats JMeter avec Gnuplot\" width=\"640\" height=\"423\" \/><\/p>\n<p style=\"\">Je n&rsquo;explique pas le fonctionnement de Gnuplot (d\u00e9sol\u00e9), vous pouvez retrouver le r\u00f4le des commandes dans la <a title=\"Documentation Gnuplot\" href=\"http:\/\/www.gnuplot.info\/docs\/gnuplot.html\" target=\"_blank\">documentation<\/a>.<\/p>\n<p style=\"\">Pourquoi utiliser Gnuplot ?, notamment par rapport \u00e0 Access (cf. <a href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-tir-de-charges-par-paliers-et-exploitation-des-resultats\/insertion-des-resultats-dans-access-2007-et-generation-dun-graphique\">ce tutorial<\/a>) ou Excel ou Calc. Tout simplement, le jour o\u00f9 vous avez plus de 65535 lignes de r\u00e9sultats, ces outils de bureautiques ne savent plus faire de graphiques&#8230;<\/p>\n<p style=\"\">Bien entendu, ce billet n&rsquo;est qu&rsquo;un d\u00e9but sur le potentiel de Gnuplot pour aider \u00e0 la restitution de r\u00e9sultats JMeter. Mais cela demande de pr\u00e9parer un peu plus les donn\u00e9es. Par exemple, via une moulinette Perl, on peut facilement transformer ces temps &lsquo;unitaires&rsquo; en temps moyen par minute, et g\u00e9n\u00e9rer le graphique sous forme de courbe.<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter10-img-gnuplot\/03-jmeter-gnuplot.png\" alt=\"Courbe de r\u00e9sultats JMeter avec Gnuplot\" width=\"640\" height=\"423\" \/><\/p>\n<p>Via la commande gnuplot :<\/p>\n<pre>plot 'Sortie_DATA_MON_TRANSACTION_CONTROLLER.csv' using 1:2 with linespoints pt 1 ps 0.5<\/pre>\n<p style=\"\">A vous de jouez un peu, bon courage<\/p>\n<p style=\"\"><em>Mise \u00e0 jour (27\/10\/2008) : J&rsquo;ai oubli\u00e9 de donner ce lien vers cet <a title=\"Visualize your data with gnuplot\" href=\"http:\/\/www.ibm.com\/developerworks\/library\/l-gnuplot\/\" target=\"_blank\">article d&rsquo;IBM developerWorks<\/a>, ce dernier m&rsquo;ayant inspir\u00e9 ce billet&#8230;<\/em><\/p>\n<p style=\"\">\n<p style=\"\">.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JMeter est un bon outil de test de charges, mais la restitution des r\u00e9sultats sous forme de graphique est parfois indigeste en utilisant JMeter. Je vous propose un moyen rapide et fiable pour g\u00e9n\u00e9rer un graphique des temps de r\u00e9ponses pour une transaction (soit un \u00e9chantillon unitaire, soit un contr\u00f4leur de transaction qui regrouperait plusieurs &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/2008\/10\/26\/faire-des-graphiques-de-resultats-jmeter-avec-gnuplot-100.html\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Faire des graphiques de r\u00e9sultats JMeter avec Gnuplot<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,34],"tags":[352,130,330,131],"class_list":["post-100","post","type-post","status-publish","format-standard","hentry","category-jmeter","category-tests-de-charges","tag-gnuplot","tag-graphiques","tag-jmeter","tag-resultats"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":4,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/100\/revisions\/197"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}