{"id":212,"date":"2009-02-08T21:58:33","date_gmt":"2009-02-08T21:58:33","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?p=212"},"modified":"2009-07-11T22:03:56","modified_gmt":"2009-07-11T21:03:56","slug":"jmeter-think-time-et-ordre-dexecution-les-bons-plans","status":"publish","type":"post","link":"https:\/\/blog.milamberspace.net\/index.php\/2009\/02\/08\/jmeter-think-time-et-ordre-dexecution-les-bons-plans-212.html","title":{"rendered":"JMeter : Think time et ordre d&rsquo;ex\u00e9cution, \u00ab les bons plans \u00bb"},"content":{"rendered":"<p style=\"\">Un billet inspir\u00e9 d&rsquo;une discussion sur le groupe Google JMeter en fran\u00e7ais<em> (merci Jslave)<\/em>.<\/p>\n<p style=\"\">Vous avez fait ce plan de test, avec 2 it\u00e9rations dans la boucle (01 Contr\u00f4leur Boucle) :<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"Plan de test Jmeter avec mauvais ordre dex\u00e9cution\" src=\"\/wp-content\/images\/jmeter13-img\/01_jmeter_plan_test01.png\" alt=\"\" width=\"307\" height=\"340\" \/><\/p>\n<p style=\"\">En pensant avoir l&rsquo;ordre d&rsquo;ex\u00e9cution suivant (pour un groupe d&rsquo;unit\u00e9s \u00e0 1-1-1) :<\/p>\n<ul>\n<li>01 Requ\u00eate Login\n<ul>\n<li>(1\u00e8re it\u00e9ration de boucle)\n<ul>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate A<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate B<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate C<\/li>\n<\/ul>\n<\/li>\n<li> (2\u00e8me it\u00e9ration de boucle)\n<ul>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate A<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate B<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate C<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li> 02 Requ\u00eate Logout<\/li>\n<\/ul>\n<p style=\"\">Malheureusement, le plan de test n&rsquo;aura pas cet ordre d&rsquo;ex\u00e9cution<!--more--> (ci-dessus), mais l&rsquo;ordre d&rsquo;ex\u00e9cution ci-dessous :<\/p>\n<ul>\n<li> 01 Requ\u00eate Login\n<ul>\n<li> (1\u00e8re it\u00e9ration de boucle)\n<ul>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate A<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate B<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate C<\/li>\n<\/ul>\n<\/li>\n<li> (2\u00e8me it\u00e9ration de boucle)\n<ul>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate A<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> 02 Requ\u00eate B<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<li> (Compteur de temps fixe : pause \t2 sec)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li> 02 Requ\u00eate C<\/li>\n<\/ul>\n<\/li>\n<li> 02 Requ\u00eate Logout<\/li>\n<\/ul>\n<p style=\"\">Tout simplement car les timers (compteur de temps) sont toujours ex\u00e9cut\u00e9s <strong>avant<\/strong> les \u00e9chantillons (samplers) qui sont au m\u00eame niveau d&rsquo;arborescence.<\/p>\n<p style=\"\">Voici le tableau des r\u00e9sultats qui montre bien l&rsquo;intervalle \u00e0 6 secondes :<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"R\u00e9sultat\" src=\"\/wp-content\/images\/jmeter13-img\/00_jmeter_resultat_plan_test01.png\" alt=\"\" width=\"721\" height=\"174\" \/><\/p>\n<p style=\"\">Une premi\u00e8re solution possible est de mettre les compteurs de temps fixe dans un \u00e9chantillon d\u00e9bogage (debug sampler).<\/p>\n<p style=\"\">Voici le plan de test associ\u00e9 :<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"Plan de test Jmeter avec Echantillons d\u00e9bogages\" src=\"\/wp-content\/images\/jmeter13-img\/02_jmeter_plan_test02.png\" alt=\"\" width=\"323\" height=\"402\" \/><\/p>\n<p style=\"\">Une autre solution, consiste \u00e0 remplacer les compteurs de temps par des \u00e9chantillons Action test.<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"Plan de test avec Action test\" src=\"\/wp-content\/images\/jmeter13-img\/03_jmeter_plan_test03.png\" alt=\"\" width=\"295\" height=\"343\" \/><\/p>\n<p style=\"\">L&rsquo;avantage de la premi\u00e8re solution c&rsquo;est de permettre d&rsquo;utiliser tout type de compteurs de temps (gaussien, fixe, al\u00e9atoire fixe, etc). L&rsquo;inconv\u00e9nient est que dans les r\u00e9sultats, on a les traces des \u00e9chantillons d\u00e9bogages.<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"R\u00e9sultats avec Echantillon d\u00e9bogage\" src=\"\/wp-content\/images\/jmeter13-img\/04_jmeter_resultat_plan_test02.png\" alt=\"\" width=\"711\" height=\"262\" \/><\/p>\n<p style=\"\">La deuxi\u00e8me solution est plus sympa, car les \u00e9chantillons Test action sont invisibles dans les r\u00e9sultats.<\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"R\u00e9sultats avec Test Action\" src=\"\/wp-content\/images\/jmeter13-img\/05_jmeter_resultat_plan_test03.png\" alt=\"\" width=\"721\" height=\"167\" \/><\/p>\n<p style=\"\">Enfin, on peut toujours mixer un \u00e9chantillon Test action avec en tant qu&rsquo;enfant un compteur de temps.<\/p>\n<p style=\"\">Une derni\u00e8re solution possible, est tout simplement de corriger le premier plan de test en supprimant 2 des 3 compteurs de temps. Elle ne fonctionnement que si les think times sont les m\u00eames pour toutes les requ\u00eates<em> (ce qui est le cas dans notre exemple, mais pas toujours dans la r\u00e9alit\u00e9 d&rsquo;un plan de test).<\/em><\/p>\n<p style=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" title=\"Dernier plan de test\" src=\"\/wp-content\/images\/jmeter13-img\/06_jmeter_plan_test04.png\" alt=\"\" width=\"301\" height=\"324\" \/><\/p>\n<p style=\"\">Pour plus d&rsquo;informations sur les ordres d&rsquo;ex\u00e9cution, voir <a href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/test_plan.html#executionorder\">ce lien<\/a> sur la documentation JMeter ainsi que <a href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/test_plan.html#timers\">celui-ci pour les timers<\/a>.<\/p>\n<p style=\"\">.\/<\/p>\n<p style=\"\">\n","protected":false},"excerpt":{"rendered":"<p>Un billet inspir\u00e9 d&rsquo;une discussion sur le groupe Google JMeter en fran\u00e7ais (merci Jslave). Vous avez fait ce plan de test, avec 2 it\u00e9rations dans la boucle (01 Contr\u00f4leur Boucle) : En pensant avoir l&rsquo;ordre d&rsquo;ex\u00e9cution suivant (pour un groupe d&rsquo;unit\u00e9s \u00e0 1-1-1) : 01 Requ\u00eate Login (1\u00e8re it\u00e9ration de boucle) (Compteur de temps fixe &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/2009\/02\/08\/jmeter-think-time-et-ordre-dexecution-les-bons-plans-212.html\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter : Think time et ordre d&rsquo;ex\u00e9cution, \u00ab les bons plans \u00bb<\/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":[32,33,34],"tags":[330,163,162],"class_list":["post-212","post","type-post","status-publish","format-standard","hentry","category-apache","category-jmeter","category-tests-de-charges","tag-jmeter","tag-ordre-dexecution","tag-plan-de-test"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/212","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=212"}],"version-history":[{"count":6,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"predecessor-version":[{"id":389,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/212\/revisions\/389"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}