<?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; HTTP</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/http/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>Sat, 04 Feb 2012 20:56:47 +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>
		<item>
		<title>Compression HTTP, ou comment réduire le temps réseau dans les performances d&#8217;une application</title>
		<link>http://blog.milamberspace.net/index.php/2008/07/06/compression-http-ou-comment-reduire-le-temps-reseau-dans-les-performances-dune-application-80.html</link>
		<comments>http://blog.milamberspace.net/index.php/2008/07/06/compression-http-ou-comment-reduire-le-temps-reseau-dans-les-performances-dune-application-80.html#comments</comments>
		<pubDate>Sun, 06 Jul 2008 16:29:06 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTTPD]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[mod_deflate]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=80</guid>
		<description><![CDATA[Avec JMeter on peut faire des tirs de performances (et d&#8217;autres choses) pour une application Web. Pour qu&#8217;une application soit performante, il est préférable qu&#8217;elle soit développée judicieusement, mais également qu&#8217;elle s&#8217;exécute sur un environnement performant. Dans ce dernier, il ne faut pas négliger la composante réseau qui peut souvent devenir un goulet d&#8217;étranglement au [...]]]></description>
			<content:encoded><![CDATA[<p style="">Avec JMeter on peut faire des tirs de performances (et d&#8217;autres choses) pour une application Web. Pour qu&#8217;une application soit performante, il est préférable qu&#8217;elle soit développée judicieusement, mais également qu&#8217;elle s&#8217;exécute sur un environnement performant. Dans ce dernier, il ne faut pas négliger la composante réseau qui peut souvent devenir un goulet d&#8217;étranglement au niveau de l&#8217;utilisateur.</p>
<p style="">En effet, vous allez développer une application hyper véloce, la faire fonctionner sur des serveurs hyper-rapides, mais votre utilisateur au bout de la ligne vous dit que c&#8217;est lent&#8230;</p>
<p style="">Vous (re)faites vos tir de charges, vous mesurez les performances, c&#8217;est excellent&#8230; sur votre réseau local. Vous placez un injecteur chez votre utilisateur final, et là c&#8217;est la surprise&#8230; c&#8217;est lent.</p>
<p style="">Le diagnostic est rapide : trop d&#8217;octets à transférer pour afficher un écran, avec une bande passante trop petite donc lenteurs. Et impossible d&#8217;augmenter la bande passante. Que faire ?<span id="more-80"></span></p>
<p style="">Bien entendu, il est possible (et il faut) optimiser ses pages HTML / XML, le taux de compression des images, etc. de son application. Tout ceci dans l&#8217;objectif de réduire le poids général en octets d&#8217;un écran.</p>
<p style="">Il y a aussi une astuce tout simple. La compression des données transitant entre le serveur Web et l&#8217;utilisateur final à travers la compression HTTP.</p>
<p style="">Cette compression basée sur l&#8217;algorithme des fichiers ZIP, est effectuée au niveau du serveur Web qui compresse à la volée les données à transmettre. Ensuite la décompression est assurée du coté des navigateurs Web.</p>
<p style="">Pour que cela marche, il faut bien entendu un navigateur récent (au moins IE 4.0, Firefox 1.0, etc) mais c&#8217;est le cas de tout le monde. Pour le serveur Web, il lui aussi doit être relativement récent (au moins IIS 5.0, Apache 2.x, etc). Il y a ensuite une configuration à faire à son niveau pour activer la compression.</p>
<p style="">Pour Apache, par exemple, c&#8217;est le module mod_deflate (et aussi mod_gzip) qui assure cette fonction. On peut ainsi ajouter dans son virtual host, les lignes suivantes (tirées que la documentation Apache) pour compresser tous les flux sauf les images.</p>
<pre># Insert filter</pre>
<pre>SetOutputFilter DEFLATE</pre>
<pre># Netscape 4.x has some problems...</pre>
<pre>BrowserMatch ^Mozilla/4 gzip-only-text/html</pre>
<pre># Netscape 4.06-4.08 have some more problems</pre>
<pre>BrowserMatch ^Mozilla/4\.0[678] no-gzip</pre>
<pre># MSIE masquerades as Netscape, but it is fine</pre>
<pre>BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</pre>
<pre># Don't compress images</pre>
<pre>SetEnvIfNoCase Request_URI \</pre>
<pre>\.(?:gif|jpe?g|png)$ no-gzip dont-vary</pre>
<p style="">Après le redémarrage du serveur Apache, le résultat donne, par exemple, pour la page d&#8217;accueil de ce blog (juste le contenu HTML) :</p>
<ul>
<li>Avant, sans compression : 50 198 octets transférés</li>
<li>Après, avec compression : 11 903 octets transférés</li>
</ul>
<p style="">Soit une diminution de 38 ko (-76%) à transférer sur le réseau ! C&#8217;est pas mal comme optimisation ? Et en plus c&#8217;est transparent pour tout le monde.</p>
<p style="">Ainsi, avec l&#8217;activation de la compression, les bons temps de réponses de son application ne seront pas masqués par les temps de transferts réseaux importants, et l&#8217;utilisateur au bout trouvera l&#8217;application rapide.</p>
<p style=""><strong>[Quelques pointeurs]</strong></p>
<ul>
<li><a title="Apache mod_deflate" href="http://httpd.apache.org/docs/2.2/mod/mod_deflate.html" target="_blank">Apache &#8211; module mod_deflate</a></li>
<li><a href="http://en.wikipedia.org/wiki/HTTP_compression" target="_blank">Wiki : la compression HTTP</a></li>
<li><a href="http://www.http-compression.com/" target="_blank">La compression HTTP par son inventeur</a></li>
</ul>
<p style="">./</p>
<p style="">
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2008/07/06/compression-http-ou-comment-reduire-le-temps-reseau-dans-les-performances-dune-application-80.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

