{"id":463,"date":"2009-07-19T20:30:11","date_gmt":"2009-07-19T19:30:11","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?p=463"},"modified":"2009-07-19T20:30:11","modified_gmt":"2009-07-19T19:30:11","slug":"jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302","status":"publish","type":"post","link":"https:\/\/blog.milamberspace.net\/index.php\/2009\/07\/19\/jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302-463.html","title":{"rendered":"JMeter : attention \u00e0 suivre ou non les redirections HTTP (code 302)"},"content":{"rendered":"<p>Un petit billet pour vous montrer un effet de bord de l&rsquo;\u00e9l\u00e9ment <strong>Serveur Proxy HTTP <\/strong>de JMeter.<\/p>\n<p>Tout d&rsquo;abord, voici un arbre JMeter qui va nous permettre de faire l&rsquo;enregistrement d&rsquo;une session de navigation.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Arbre JMeter pour enregistrement proxy\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/01-jmeter-redirection.png\" alt=\"\" width=\"437\" height=\"209\" \/><\/p>\n<p>J&rsquo;ai choisi comme application mod\u00e8le, l&rsquo;un des exemples livr\u00e9s avec Tomcat 6 : l&rsquo;exemple de ressources prot\u00e9g\u00e9es par un identifiant et mot de passe.<!--more--><\/p>\n<p>Donc si vous prenez un Tomcat 6 avec ses applications d&rsquo;exemples, vous le d\u00e9marrez et vous entrez cette adresse : <a href=\"http:\/\/localhost:8080\/examples\/jsp\/security\/protected\">http:\/\/localhost:8080\/examples\/jsp\/security\/protected<\/a>, vous aurez cette page :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Page de connexion de lapplication dexemple Tomcat 6\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/03-jmeter-redirection.png\" alt=\"\" width=\"701\" height=\"247\" \/><\/p>\n<p>Le login et le mot de passe \u00e0 saisir se trouvent dans le fichier <em>conf\/tomcat-users.xml<\/em> de votre Tomcat. Donc on saisit les accr\u00e9ditations, pour arriver sur cette page :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Login r\u00e9ussie dans lapplication dexemple de Tomcat\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/04-jmeter-redirection.png\" alt=\"\" width=\"679\" height=\"347\" \/><\/p>\n<p>Elle nous dit simplement que nous sommes bien connect\u00e9 et identifi\u00e9.<\/p>\n<p>Maintenant, si on (re)fait cette session de navigation correspondant \u00e0 ce sc\u00e9nario fonctionnel en utilisant l&rsquo;\u00e9l\u00e9ment <strong>Serveur Proxy HTTP<\/strong>, on va obtenir cet arbre dans le <strong>contr\u00f4leur Enregistreur <\/strong>:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Session de navigateur enregistr\u00e9e par le Proxy JMeter\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/06-jmeter-redirection.png\" alt=\"\" width=\"390\" height=\"105\" \/><\/p>\n<p>Donc, on a trois requ\u00eates (bien que l&rsquo;on ait appel\u00e9 un sc\u00e9nario de deux \u00e9crans : \u00ab\u00a0formulaire de connexion\u00a0\u00bb, \u00ab\u00a0page d&rsquo;accueil connect\u00e9e\u00a0\u00bb).<\/p>\n<p>Quand on regarde dans l&rsquo;\u00e9l\u00e9ment Arbre de r\u00e9sultats qui est situ\u00e9 en fils du Serveur Proxy HTTP, on trouve la raison des trois requ\u00eates :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Redirection code 302\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/05-jmeter-redirection-302.png\" alt=\"\" width=\"817\" height=\"321\" \/><\/p>\n<p>La deuxi\u00e8me requ\u00eate est une redirection HTTP (code 302).<\/p>\n<p>Ce qui se passe donc, c&rsquo;est qu&rsquo;une fois authentifi\u00e9 par le syst\u00e8me, ce dernier envoi une instruction de redirection au navigateur (ici JMeter) pour lui faire afficher la page d&rsquo;accueil.<\/p>\n<p>Ok, maintenant voyons ce qui se passe si on reprend notre sc\u00e9nario JMeter et on l&rsquo;ex\u00e9cute avec un <strong>groupe d&rsquo;unit\u00e9s<\/strong> configur\u00e9 \u00e0 1 utilisateur qui ex\u00e9cute une seule it\u00e9ration.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ex\u00e9cution du sc\u00e9nario JMeter enregistr\u00e9\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/07-jmeter-redirection.png\" alt=\"\" width=\"1095\" height=\"337\" \/><\/p>\n<p>Dans l&rsquo;arbre de r\u00e9sultats (celui rattach\u00e9 au groupe d&rsquo;unit\u00e9s du test), on voit les trois requ\u00eates, et pour la deuxi\u00e8me requ\u00eate, on trouve qu&rsquo;elle correspond \u00e0 deux requ\u00eates, la premi\u00e8re<em> ([&#8230;]\/protected\/j_security_check)<\/em> qui a retourn\u00e9e un code 302 (redirection) vers la page<em> <\/em>d&rsquo;accueil connect\u00e9<em>e ([&#8230;]\/protected\/)<\/em>.<\/p>\n<p>La troisi\u00e8me requ\u00eate est la m\u00eame URL que la requ\u00eate de redirection provenant de la requ\u00eate num\u00e9ro 2. Ce qui signifie que le test automatis\u00e9 de JMeter, dans ce cas, appelle <span style=\"text-decoration: underline;\">deux fois<\/span> la m\u00eame URL au lieu d&rsquo;une fois.<\/p>\n<p>C&rsquo;est un probl\u00e8me, car le nombre de requ\u00eates attendu n&rsquo;est pas le bon, de plus, dans un r\u00e9cepteur comme la Rapport consolid\u00e9, on trouvera que le temps de r\u00e9ponse de la requ\u00eate num\u00e9ro 2 est \u00e9gale \u00e0 1\/ l&rsquo;ex\u00e9cution de la servlet j_security_check <strong>+<\/strong> 2\/ l&rsquo;appel \u00e0 la page d&rsquo;accueil connect\u00e9e.<\/p>\n<p><span style=\"text-decoration: underline;\">Comment r\u00e9soudre ce petit soucis ? Deux moyens :<\/span><\/p>\n<p>Le premier consiste, tout simplement \u00e0 demander \u00e0 JMeter de ne pas suivre les redirections (ne pas traiter les codes 302), pour cela, dans l&rsquo;\u00e9chantillon correspondant \u00e0 la requ\u00eate 2, il suffit de d\u00e9cocher la case \u00ab\u00a0Suivre les redirections\u00a0\u00bb<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"D\u00e9sactiver la case Suivre les redirections\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/21-jmeter-redirection.png\" alt=\"\" width=\"793\" height=\"277\" \/><\/p>\n<p>Ensuite \u00e0 l&rsquo;ex\u00e9cution du test, on a bien 3 requ\u00eates (sans aucune &lsquo;double-requ\u00eate&rsquo;). La requ\u00eate num\u00e9ro 2 donne bien une redirection, mais elle n&rsquo;est pas suivie par JMeter. Et maintenant le temps de r\u00e9ponse de cette requ\u00eate correspond bien \u00e0 celui de l&rsquo;ex\u00e9cution de la servlet j_security_check.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ex\u00e9cution sans suivre les redirections\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/22-jmeter-redirection.png\" alt=\"\" width=\"839\" height=\"305\" \/><\/p>\n<p>Une autre fa\u00e7on de solutionner ce probl\u00e8me est de tout simplement (aussi) supprimer ou d\u00e9sactiver la requ\u00eate suivant la requ\u00eate ayant la redirection. Donc la troisi\u00e8me requ\u00eate doit \u00eatre d\u00e9sactiv\u00e9e (ou carr\u00e9ment supprim\u00e9e).<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"D\u00e9sactiver la trois\u00e8me requ\u00eate\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/11-jmeter-redirection.png\" alt=\"\" width=\"540\" height=\"408\" \/><\/p>\n<p>Ensuite \u00e0 l&rsquo;ex\u00e9cution, on a seulement deux requ\u00eates, la deuxi\u00e8me correspondant au temps d&rsquo;ex\u00e9cution de la servlet j_security_check et la page d&rsquo;accueil.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ex\u00e9cution sans troisi\u00e8me requ\u00eate\" src=\"\/wp-content\/images\/jmeter20-img-redirection\/12-jmeter-redirection.png\" alt=\"\" width=\"787\" height=\"170\" \/><\/p>\n<p>Je sais, vous allez me poser la question (que je me suis \u00e9galement pos\u00e9) : quelle est la meilleure m\u00e9thode ?<\/p>\n<p><em>Bien entendu<\/em>, il n&rsquo;y a pas de r\u00e9ponse miracle.<\/p>\n<ul>\n<li>Si on veut le d\u00e9tail des temps de r\u00e9ponses, au niveau \u00e9chantillon (requ\u00eate http), il est pr\u00e9f\u00e9rable de<em> ne pas<\/em> activer les redirections.<\/li>\n<li>Si le d\u00e9tail ne nous int\u00e9resse pas car la requ\u00eate de redirection fait partie d&rsquo;un ensemble de requ\u00eates regroup\u00e9es dans un contr\u00f4leur de transaction, et que l&rsquo;on ne regarde que le temps consolid\u00e9, alors la deuxi\u00e8me solution (mais aussi la premi\u00e8re) est bonne.<\/li>\n<\/ul>\n<p>Voil\u00e0, donc <em>attention<\/em> aux redirections dans les sc\u00e9narios de test qui ont \u00e9t\u00e9 enregistr\u00e9s via la fonctionnalit\u00e9 de <strong>Serveur Proxy HTTP<\/strong> de JMeter.<\/p>\n<p><em>Un grand remerciement \u00e0 Moncef, perfectionniste dans l&rsquo;\u00e2me, qui a d\u00e9tect\u00e9 ce probl\u00e8me dans un sc\u00e9nario, et m&rsquo;a inspir\u00e9 ce billet.<\/em><\/p>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un petit billet pour vous montrer un effet de bord de l&rsquo;\u00e9l\u00e9ment Serveur Proxy HTTP de JMeter. Tout d&rsquo;abord, voici un arbre JMeter qui va nous permettre de faire l&rsquo;enregistrement d&rsquo;une session de navigation. J&rsquo;ai choisi comme application mod\u00e8le, l&rsquo;un des exemples livr\u00e9s avec Tomcat 6 : l&rsquo;exemple de ressources prot\u00e9g\u00e9es par un identifiant et &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/2009\/07\/19\/jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302-463.html\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter : attention \u00e0 suivre ou non les redirections HTTP (code 302)<\/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],"tags":[188,100,330,187],"class_list":["post-463","post","type-post","status-publish","format-standard","hentry","category-apache","category-jmeter","tag-188","tag-http","tag-jmeter","tag-redirections"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/463","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=463"}],"version-history":[{"count":4,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/463\/revisions"}],"predecessor-version":[{"id":467,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/463\/revisions\/467"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/categories?post=463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/tags?post=463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}