<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MilamberSpace - JMeter &#187; redirections</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/redirections/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>Apache JMeter (surtout) mais aussi GNU/Linux, OpenSource, l&#039;Informatique, etc.</description>
	<lastBuildDate>Sun, 05 Feb 2012 09:51:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JMeter : attention à suivre ou non les redirections HTTP (code 302)</title>
		<link>http://blog.milamberspace.net/index.php/2009/07/19/jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302-463.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/07/19/jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302-463.html#comments</comments>
		<pubDate>Sun, 19 Jul 2009 19:30:11 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[302]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[redirections]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=463</guid>
		<description><![CDATA[Un petit billet pour vous montrer un effet de bord de l&#8217;élément Serveur Proxy HTTP de JMeter. Tout d&#8217;abord, voici un arbre JMeter qui va nous permettre de faire l&#8217;enregistrement d&#8217;une session de navigation. J&#8217;ai choisi comme application modèle, l&#8217;un des exemples livrés avec Tomcat 6 : l&#8217;exemple de ressources protégées par un identifiant et [...]]]></description>
			<content:encoded><![CDATA[<p>Un petit billet pour vous montrer un effet de bord de l&#8217;élément <strong>Serveur Proxy HTTP </strong>de JMeter.</p>
<p>Tout d&#8217;abord, voici un arbre JMeter qui va nous permettre de faire l&#8217;enregistrement d&#8217;une session de navigation.</p>
<p style="text-align: center;"><img 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>
<p>J&#8217;ai choisi comme application modèle, l&#8217;un des exemples livrés avec Tomcat 6 : l&#8217;exemple de ressources protégées par un identifiant et mot de passe.<span id="more-463"></span></p>
<p>Donc si vous prenez un Tomcat 6 avec ses applications d&#8217;exemples, vous le démarrez 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>
<p style="text-align: center;"><img 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>
<p>Le login et le mot de passe à saisir se trouvent dans le fichier <em>conf/tomcat-users.xml</em> de votre Tomcat. Donc on saisit les accréditations, pour arriver sur cette page :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Login réussie dans lapplication dexemple de Tomcat" src="/wp-content/images/jmeter20-img-redirection/04-jmeter-redirection.png" alt="" width="679" height="347" /></p>
<p>Elle nous dit simplement que nous sommes bien connecté et identifié.</p>
<p>Maintenant, si on (re)fait cette session de navigation correspondant à ce scénario fonctionnel en utilisant l&#8217;élément <strong>Serveur Proxy HTTP</strong>, on va obtenir cet arbre dans le <strong>contrôleur Enregistreur </strong>:</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Session de navigateur enregistrée par le Proxy JMeter" src="/wp-content/images/jmeter20-img-redirection/06-jmeter-redirection.png" alt="" width="390" height="105" /></p>
<p>Donc, on a trois requêtes (bien que l&#8217;on ait appelé un scénario de deux écrans : « formulaire de connexion », « page d&#8217;accueil connectée »).</p>
<p>Quand on regarde dans l&#8217;élément Arbre de résultats qui est situé en fils du Serveur Proxy HTTP, on trouve la raison des trois requêtes :</p>
<p style="text-align: center;"><img 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>
<p>La deuxième requête est une redirection HTTP (code 302).</p>
<p>Ce qui se passe donc, c&#8217;est qu&#8217;une fois authentifié par le système, ce dernier envoi une instruction de redirection au navigateur (ici JMeter) pour lui faire afficher la page d&#8217;accueil.</p>
<p>Ok, maintenant voyons ce qui se passe si on reprend notre scénario JMeter et on l&#8217;exécute avec un <strong>groupe d&#8217;unités</strong> configuré à 1 utilisateur qui exécute une seule itération.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Exécution du scénario JMeter enregistré" src="/wp-content/images/jmeter20-img-redirection/07-jmeter-redirection.png" alt="" width="1095" height="337" /></p>
<p>Dans l&#8217;arbre de résultats (celui rattaché au groupe d&#8217;unités du test), on voit les trois requêtes, et pour la deuxième requête, on trouve qu&#8217;elle correspond à deux requêtes, la première<em> ([...]/protected/j_security_check)</em> qui a retournée un code 302 (redirection) vers la page<em> </em>d&#8217;accueil connecté<em>e ([...]/protected/)</em>.</p>
<p>La troisième requête est la même URL que la requête de redirection provenant de la requête numéro 2. Ce qui signifie que le test automatisé de JMeter, dans ce cas, appelle <span style="text-decoration: underline;">deux fois</span> la même URL au lieu d&#8217;une fois.</p>
<p>C&#8217;est un problème, car le nombre de requêtes attendu n&#8217;est pas le bon, de plus, dans un récepteur comme la Rapport consolidé, on trouvera que le temps de réponse de la requête numéro 2 est égale à 1/ l&#8217;exécution de la servlet j_security_check <strong>+</strong> 2/ l&#8217;appel à la page d&#8217;accueil connectée.</p>
<p><span style="text-decoration: underline;">Comment résoudre ce petit soucis ? Deux moyens :</span></p>
<p>Le premier consiste, tout simplement à demander à JMeter de ne pas suivre les redirections (ne pas traiter les codes 302), pour cela, dans l&#8217;échantillon correspondant à la requête 2, il suffit de décocher la case « Suivre les redirections »</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Désactiver la case Suivre les redirections" src="/wp-content/images/jmeter20-img-redirection/21-jmeter-redirection.png" alt="" width="793" height="277" /></p>
<p>Ensuite à l&#8217;exécution du test, on a bien 3 requêtes (sans aucune &#8216;double-requête&#8217;). La requête numéro 2 donne bien une redirection, mais elle n&#8217;est pas suivie par JMeter. Et maintenant le temps de réponse de cette requête correspond bien à celui de l&#8217;exécution de la servlet j_security_check.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Exécution sans suivre les redirections" src="/wp-content/images/jmeter20-img-redirection/22-jmeter-redirection.png" alt="" width="839" height="305" /></p>
<p>Une autre façon de solutionner ce problème est de tout simplement (aussi) supprimer ou désactiver la requête suivant la requête ayant la redirection. Donc la troisième requête doit être désactivée (ou carrément supprimée).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Désactiver la troisème requête" src="/wp-content/images/jmeter20-img-redirection/11-jmeter-redirection.png" alt="" width="540" height="408" /></p>
<p>Ensuite à l&#8217;exécution, on a seulement deux requêtes, la deuxième correspondant au temps d&#8217;exécution de la servlet j_security_check et la page d&#8217;accueil.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Exécution sans troisième requête" src="/wp-content/images/jmeter20-img-redirection/12-jmeter-redirection.png" alt="" width="787" height="170" /></p>
<p>Je sais, vous allez me poser la question (que je me suis également posé) : quelle est la meilleure méthode ?</p>
<p><em>Bien entendu</em>, il n&#8217;y a pas de réponse miracle.</p>
<ul>
<li>Si on veut le détail des temps de réponses, au niveau échantillon (requête http), il est préférable de<em> ne pas</em> activer les redirections.</li>
<li>Si le détail ne nous intéresse pas car la requête de redirection fait partie d&#8217;un ensemble de requêtes regroupées dans un contrôleur de transaction, et que l&#8217;on ne regarde que le temps consolidé, alors la deuxième solution (mais aussi la première) est bonne.</li>
</ul>
<p>Voilà, donc <em>attention</em> aux redirections dans les scénarios de test qui ont été enregistrés via la fonctionnalité de <strong>Serveur Proxy HTTP</strong> de JMeter.</p>
<p><em>Un grand remerciement à Moncef, perfectionniste dans l&#8217;âme, qui a détecté ce problème dans un scénario, et m&#8217;a inspiré ce billet.</em></p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/07/19/jmeter-attention-a-suivre-ou-non-les-redirections-http-code-302-463.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

