{"id":87,"date":"2008-08-15T10:00:09","date_gmt":"2008-08-15T09:00:09","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?p=87"},"modified":"2015-08-10T07:40:44","modified_gmt":"2015-08-10T06:40:44","slug":"jmeter-fixer-la-duree-de-repetition-dune-requete","status":"publish","type":"post","link":"https:\/\/blog.milamberspace.net\/index.php\/2008\/08\/15\/jmeter-fixer-la-duree-de-repetition-dune-requete-87.html","title":{"rendered":"JMeter &#8211; Fixer la dur\u00e9e de r\u00e9p\u00e9tition d&rsquo;une requ\u00eate"},"content":{"rendered":"<p>Vous utilisez JMeter pour faire un tir de charge (ou autres), et vous devez avoir une requ\u00eate qui s&rsquo;ex\u00e9cute \u00e0<strong> un interval fixe<\/strong> <strong>quelque soit le temps de r\u00e9ponse de la requ\u00eate<\/strong>.<\/p>\n<p>Par exemple, vous devez ex\u00e9cuter une requ\u00eate chaque 20 secondes, le temps de r\u00e9ponse de la dite requ\u00eate est 4,5 sec. Donc si on d\u00e9marre \u00e0 T0, on a T0+4,5 sec la requ\u00eate, puis on demande \u00e0 JMeter de faire une pause pendant (20 sec \u2013 4,5 sec = 15,5 sec), puis une nouvelle requ\u00eate, etc.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter08-img\/01-time.png\" alt=\"Sch\u00e9ma de r\u00e9p\u00e9tition d'une requ\u00eate \u00e0 interval fixe\" width=\"689\" height=\"94\" \/><\/p>\n<p><em>Voici comme le faire avec JMeter.<\/em><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter08-img\/00-test-plan.png\" alt=\"Test Plan Jmeter\" width=\"687\" height=\"273\" \/><\/p>\n<p>Dans l&rsquo;\u00e9l\u00e9ment <strong>User Defined Variables<\/strong>, on place une variable qui sera la dur\u00e9e fixe (en millisecondes) de l&rsquo;interval.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter08-img\/02-user-defined-variables.png\" alt=\"Element User Defined Variables\" width=\"603\" height=\"142\" \/><\/p>\n<p>On place \u00e9galement un \u00e9l\u00e9ment <strong>Transaction Controller <\/strong>qui contient l&rsquo;\u00e9l\u00e9ment <strong>HTTP Request<\/strong> (ou plusieurs \u00e9l\u00e9ments<strong> HTTP Request<\/strong>). \u00c0 l&rsquo;int\u00e9rieur de l&rsquo;\u00e9l\u00e9ment <strong>HTTP Request<\/strong> (ou du premier \u00e9l\u00e9ment), on ajoute un \u00e9l\u00e9ment <strong>User Parameters<\/strong>, dans lequel on ajoute une variable START qui sera initialis\u00e9e \u00e0<\/p>\n<pre>${__time(,)}<\/pre>\n<p>, c&rsquo;est \u00e0 dire au temps en millisecondes de d\u00e9but de la requ\u00eate.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter08-img\/03-users_parameters.png\" alt=\"Element Users Parameters\" width=\"598\" height=\"147\" \/><\/p>\n<p>Ensuite en dernier \u00e9l\u00e9ment du<strong> Transaction Controller<\/strong>, on ajoute un \u00e9l\u00e9ment <strong>Test Action<\/strong>, qui sera charg\u00e9 de mettre en pause le thread group durant l&rsquo;intervalle de temps d&rsquo;attente. Pour cela on d\u00e9finit sa dur\u00e9e avec la formule suivante :<\/p>\n<pre>${__longSum(${INTERVALLE},${START},-${__time()})}<\/pre>\n<p>Cette fonction fait le calcul du temps \u00e0 attendre par rapport \u00e0 la variable START et la variable INTERVALLE.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter08-img\/04-test-action.png\" alt=\"Element Test Action\" width=\"401\" height=\"160\" \/><\/p>\n<p>On ajoute les autres \u00e9l\u00e9ments restants (cookie manager, http request defaults, etc). Puis, on peut lancer un petit tir de contr\u00f4le de bon fonctionnement. Ici le <strong>Thread Group<\/strong> est \u00e0 1-1-4 (1 user, ramp-up \u00e0 1 sec, 4 boucles).<\/p>\n<p>Le r\u00e9sultat est ci-dessous. On voit que les requ\u00eates durent en moyenne 5,7 secondes, et que chaque requ\u00eate est appel\u00e9e chaque 20 secondes (l&rsquo;\u00e9l\u00e9ment<strong> Transaction Controller <\/strong>donnant le temps pass\u00e9 de la requ\u00eate HTTP + du Test Action).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter08-img\/05-summary-results.png\" alt=\"R\u00e9sultats du tir\" width=\"710\" height=\"166\" \/><\/p>\n<p>Et voil\u00e0, avec ce type de sc\u00e9nario, on peut r\u00e9pondre \u00e0 un besoin du type \u00ab\u00a0<em>je veux que mon utilisateur ex\u00e9cute chaque 20 secondes une requ\u00eate quelque soit le temps de r\u00e9ponse de la requ\u00eate<\/em>\u00a0\u00bb<\/p>\n<p>Le script JMeter est t\u00e9l\u00e9chargeable <a href=\"http:\/\/blog.milamberspace.net\/wp-content\/uploads\/fichiers\/Duree_Thread_fr.jmx.zip\">ici<\/a>.<\/p>\n<p>(2015\/08\/10) Vous pouvez \u00e9galement utiliser l&rsquo;\u00e9l\u00e9ment<a href=\"http:\/\/jmeter.apache.org\/usermanual\/component_reference.html#Constant_Throughput_Timer\"> Compteur de d\u00e9bit constant<\/a> pour effectuer ce genre d&rsquo;op\u00e9ration.<\/p>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous utilisez JMeter pour faire un tir de charge (ou autres), et vous devez avoir une requ\u00eate qui s&rsquo;ex\u00e9cute \u00e0 un interval fixe quelque soit le temps de r\u00e9ponse de la requ\u00eate. Par exemple, vous devez ex\u00e9cuter une requ\u00eate chaque 20 secondes, le temps de r\u00e9ponse de la dite requ\u00eate est 4,5 sec. Donc si &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/2008\/08\/15\/jmeter-fixer-la-duree-de-repetition-dune-requete-87.html\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter &#8211; Fixer la dur\u00e9e de r\u00e9p\u00e9tition d&rsquo;une requ\u00eate<\/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,36,34],"tags":[173,314,109,330],"class_list":["post-87","post","type-post","status-publish","format-standard","hentry","category-apache","category-jmeter","category-performance","category-tests-de-charges","tag-debit","tag-interval","tag-intervalle","tag-jmeter"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/87","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=87"}],"version-history":[{"count":4,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":1458,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/87\/revisions\/1458"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}