<?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>Archives des Test de Charge - Alain ARDITI&#039;s blog</title>
	<atom:link href="https://alain.arditi.fr/category/test-de-charge/feed/" rel="self" type="application/rss+xml" />
	<link>https://alain.arditi.fr/category/test-de-charge/</link>
	<description>Aide mémoire informatique</description>
	<lastBuildDate>Sun, 03 Apr 2022 17:35:40 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://alain.arditi.fr/wp-content/uploads/2020/04/cropped-ARDITI_Alain_20200326_512x512-32x32.jpg</url>
	<title>Archives des Test de Charge - Alain ARDITI&#039;s blog</title>
	<link>https://alain.arditi.fr/category/test-de-charge/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tests de charge : le plugin jp@gc Concurrency Thread Group</title>
		<link>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/</link>
					<comments>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sun, 03 Apr 2022 17:24:10 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1097</guid>

					<description><![CDATA[<p>Lors de tests de charge avec JMeter, il est courant d’utiliser le plugin jp@gc Concurrency Thread Group (https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/), qui permet de faire monter la charge par marche d’escalier. Les marches d’escalier quand elles sont suffisamment longues par rapport à la fréquence des prises de mesures du côté de l’infrastructure, permettent de faire une corrélation directe&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Poursuivre la lecture <span class="screen-reader-text">Tests de charge : le plugin jp@gc Concurrency Thread Group</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Tests de charge : le plugin jp@gc Concurrency Thread Group</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lors de tests de charge avec JMeter, il est courant d’utiliser le plugin jp@gc Concurrency Thread Group (<a href="https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/" target="_blank" rel="noreferrer noopener">https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/</a>), qui permet de faire monter la charge par marche d’escalier.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/B9olHiSkBPQ2w3WvFYegBqMTObxnoVjyYMAA11cJk5Yv4xvxp3hdp1HwgYyX-PMOUO4cfnzjlFvtLs654CLmDZxiXe0M1FFpV3pQwexKJ6MeUw3joCLo7QHyaYyBnMClIbhZ1hQq" alt="JMeter logo"/></figure>



<p>Les marches d’escalier quand elles sont suffisamment longues par rapport à la fréquence des prises de mesures du côté de l’infrastructure, permettent de faire une corrélation directe entre la charge et le comportement de la plateforme. En effet, la plateforme va consommer des ressources en fonction de l&rsquo;injection et on pourra visualiser les marches d’escalier du côté des graphiques de l’infrastructure.</p>



<span id="more-1097"></span>



<p>A condition que la durée des marches, ou plus précisément la durée des paliers, permette d’avoir suffisamment de points de mesure côté infrastructure. Si la fréquence de la métrologie est de 5 minutes, par exemple, qui est la valeur courante des logiciels de métrologie, il faut au moins des paliers de 15 à 20 minutes pour avoir 3 à 4 mesures et visualiser ainsi le palier.</p>



<p>Dans l’exemple suivant, on peut voir l’utilisation du plugin “Concurrency Thread Group” avec des paliers de 20 minutes.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/2nQJkcMBYSxMnF36TP43CihgrFAOMJjJ5ZtCcHElEMzbmAMwryDCE-wyMY28PG0wKSbZ4tTYEOcxEkpMcPqH4t-NDDVgS81Nt0Ph_gfoXZSMW5w2GAnkDxj0U-nHSy94XwNX0Lkn" alt=""/></figure>



<p>Du côté de l’infrastructure, sur le graphe du débit réseau on retrouve les paliers :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/kOuUPKzgvJhlC5EpSTXOkmQqKq4T0f0gyZdvSdQYs5j2ZbscmoIfoJ95k5r_bdPSPmUj2SkPJ6gleVTi5bGsOuYkU4gvGcXLcG3aQeKNbxseN4A_F7N4tiUGPLb6jnOuTjVTpAu5" alt=""/></figure>



<p>On peut ainsi faire la correspondance entre le nombre de threads et la charge de la plateforme.</p>



<p>On peut dire qu’à 60 threads, au 3<sup>ème</sup> palier, le débit de la plateforme est de 60 Mbps et qu&rsquo;au 8<sup>ème</sup> et dernier palier, à 150 threads, le débit est de 150Mbps.</p>



<p>Même si les paliers de la métrologie ne sont pas plats, on retrouve bien l’évolution de l’injecteur, et dans ce cas précis, on peut même conclure sans trop se tromper que le débit augmente de 1 Mbps par thread.</p>



<p>Par contre, on n’en déduit pas facilement le nombre de parcours ou de sessions simultanées à chaque palier.</p>



<p>Un moyen assez simple d’extrapoler les résultats pour avoir des métriques marketing, est de spécifier des valeurs judicieuses dans le plugin “Concurrency Thread Group”, comme on va le voir dans le graphique ci-dessous :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/Cti5CG10tspGS_UmmaEWmhdsTsY18i3_RQtBOQtN-n76TKT_SFjP9LHiDT4dR3UPmDafmR06jwVzteGgw9bd-l78xqQ7qnH0WPYBjN0pZGFLKWv4uyYE7YM9BYMJIVCiNYSztNxc" alt=""/></figure>



<p>Ici, on a des marches d’escalier de 20 minutes avec 20 threads supplémentaires à chaque marche. On remarque que les surfaces sous les marches augmentent d’une unité de surface (4 carreaux) par marche.</p>



<p>Ainsi la surface sous la dernière marche vaut 5 fois la surface sous la première marche.</p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-1024x722.png" alt="" class="wp-image-1100" width="610" height="430" srcset="https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-1024x722.png 1024w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-300x212.png 300w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-768x542.png 768w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers.png 1534w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>Comme les threads travaillent de manière uniforme, on peut en déduire que s’ils parcourent n scénarios pendant les 20 première minutes, c’est à dire pendant la première marche, ils en parcourent 5 fois plus lorsque JMeter atteint les 100 threads, c’est à dire à la dernière marche.</p>



<p>Comme JMeter fournit le nombre total de scénarios qu’il a exécutés à la fin du tir, en détaillant le nombre d’exécution par URL, on peut en déduire facilement le nombre de visites.</p>



<p>Pour connaître le nombre de scénarios exécutés pendant les 20 premières minutes, on part de l’hypothèse que nombre de scénarios est proportionnel à la surface sous les marches.</p>



<p>La surface totale de l’escalier de 5 marches, qu’on appellera S<sub>tot</sub>, est de 1+2+3+4+5 = 5&#215;6/2 = 15. Donc S<sub>tot</sub> = 15.</p>



<p>Si le nombre total de scénarios exécutés par JMeter, donc le nombre de visites, est V<sub>tot</sub>, alors pendant les 20 premières minutes (durée de la première marche), JMeter a exécuté&nbsp; V<sub>tot</sub> / S<sub>tot</sub> visites.</p>



<p>Et pendant les 20 dernières minutes, à la 5<sup>ème</sup> marche, il aura exécuté (V<sub>tot</sub> / S<sub>tot</sub> * 5) visites, puisque la surface sous la 5eme marche est 5 fois plus grande que la surface de la première.</p>



<p>En prenant les usages du Web qui comptabilisent les sessions comme toute visite après 30 minutes d’inactivité, si on extrapole le nombre de visites du dernier palier de 20 minutes à 30 minutes, on obtient (V<sub>tot</sub> / S<sub>tot</sub> * 5) * 3/2 sessions simultanées lorsqu’on atteint 100 threads.</p>



<p>On voit que ce calcul s’applique quel que soit le nombre de threads et la durée des paliers, sur la base des éléments fournis par JMeter, et se fait de manière simple, pour peu qu’on choisisse bien les paramètres du plugin “Concurrency Thread Group”.</p>



<p>En faisant la corrélation avec les graphes de l’infrastructure, on peut en déduire facilement le nombre de sessions simultanées qu’elle peut supporter !</p>



<p>Une fois qu&rsquo;on connaît le nombre de sessions simultanées, on peut extrapoler les nombre de visite à l&rsquo;heure, puis par jour et enfin le nombre de visites mensuelles, en jetant un oeil sur l&rsquo;article : <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a></p>
<p>L’article <a href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Tests de charge : le plugin jp@gc Concurrency Thread Group</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Test de charge : Comment extrapoler le nombre de visites ?</title>
		<link>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/</link>
					<comments>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sat, 02 Apr 2022 10:17:54 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1092</guid>

					<description><![CDATA[<p>Le test de charge a pour objectif d’avoir une idée de l’audience que pourra supporter le site testé. Sauf que le test est généralement fait sur une durée relativement courte avec des scénarios plus ou moins réalistes. A partir de là, on va essayer d’extrapoler l’audience produite par le test en un nombre de visites&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Poursuivre la lecture <span class="screen-reader-text">Test de charge : Comment extrapoler le nombre de visites ?</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Le test de charge a pour objectif d’avoir une idée de l’audience que pourra supporter le site testé. Sauf que le test est généralement fait sur une durée relativement courte avec des scénarios plus ou moins réalistes. A partir de là, on va essayer d’extrapoler l’audience produite par le test en un nombre de visites par mois, par jour, en nombre de sessions simultanées et en nombre de conversions à l’heure quand il s’agit de boutiques en ligne.&nbsp;</p>



<span id="more-1092"></span>



<p>On va s’intéresser à l’audience d’un site de commerce en ligne. Avant de passer une commande sur un site de commerce en ligne, un internaute va peut-être passer 20 minutes à naviguer sur le site pour parcourir le catalogue et remplir son panier. Ensuite, il va passer la commande, créer son compte, saisir son adresse de livraison, effectuer le paiement, et éventuellement vérifier sa commande sur le site. Il aura passé 30 minutes sur le site.</p>



<p>Afin de simuler l’audience, nous utilisons l’outil JMeter (<a href="https://jmeter.apache.org" target="_blank" rel="noreferrer noopener nofollow">https://jmeter.apache.org</a>).</p>



<figure class="wp-block-image size-full"><img decoding="async" width="521" height="177" src="https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo.png" alt="JMeter logo" class="wp-image-1093" srcset="https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo.png 521w, https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo-300x102.png 300w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>Si on veut simuler une audience équivalente à 600 commandes à l’heure, il faudra lancer notre scénario 600 fois en une heure. Comme il dure 30 minutes, il faudra lancer 300 threads en parallèle qui vont chacun effectuer 2 scénarios. On aura bien nos 600 commandes en une heure, sauf qu’on imagine que les passages de commande vont se trouver plutôt à la fin des 30 minutes, on aura donc un biais par rapport à la réalité.</p>



<p>Si on veut supprimer ce biais, il faudrait que l’injecteur soit dans un rythme de croisière nominal, avant la prise des mesures, afin que les aléas temporels du scénario permettent de distribuer les commandes. Ca veut dire, qu’il faudra lancer les 300 threads quelques heures auparavant et au moins 30 minutes après l’heure de mesure.</p>



<p>Et si le site de commerce en ligne à un taux de conversion de 5%, c’est à dire le nombre de visiteurs qui vont passer une commande, il faut multiplier par 20 le nombre de scénarios exécutés par l’injecteur, sachant que 95% pourcents d’entre eux ne doivent pas passer de commande. En conservant des scénarios de 30 minutes, il faudra 6000 threads pour simuler l’audience et faire durer le test un bon paquet d’heures&#8230;.</p>



<p>Bref, dans ces conditions, la simulation de la réalité devient très difficile en pratique, car la durée des tests est prohibitive !</p>



<p>Afin de permettre la réalisation des tests dans des durées acceptables, on va raccourcir la durée du parcours d’un visiteur.</p>



<p>On va faire la supposition que lancer 300 threads qui jouent un scénario de 30 minutes pendant 1 heure, c’est équivalent pour le site qui reçoit les visites à 30 threads qui jouent un scénario de 3 minutes pendant 1 heure.</p>



<p>Dans les 2 cas, on aura exécuté 600 scénarios en 1 heure. Le site aura répondu aux mêmes sollicitations sauf que dans le deuxième cas, le rythme de croisière sera atteint dix fois plus rapidement, facilitant du même coup la réalisation du test qui pourra durer 10 fois moins longtemps !</p>



<p>Si finalement, le scénario est accéléré pour durer 30 secondes, avec un enchaînement de 20 à 40 requêtes HTTP et des aléas temporels de quelques centaines de millisecondes entre les requêtes, on obtient l’équivalent de la charge précédente avec 5 threads pendant 30 secondes.</p>



<p>Si on fait durer ce dernier test 10 minutes, chaque thread aura fait 20 boucles. On n’est pas loin d’un rythme de croisière avec suffisamment d’aléa pour le considérer comme représentatif d’une audience de 600 commandes à l’heure.</p>



<p>Une manière simple de créer des tirs sur JMeter simulant une charge données est d’utiliser les paramètres “Number of Threads” et “Ramp-up period” dans l&rsquo;objet “Thread Group”&nbsp;&nbsp;</p>



<p>Dans l’exemple ci dessous :</p>



<p><img decoding="async" src="https://lh5.googleusercontent.com/QbgnVRD_W9-NnDcVzy763VtKfRgtOb83ZA7g9qG_VifKW5VYDwq41TUSOnfzLRK0-a0ss498gAmxwpfN9vkbhpWRk18TQv878s4pMiUUsh90sPhwu0YApniEby2rdhlk_nj_sEiI" width="602" height="275"></p>



<p>les 30 threads seront atteint après une période de 20 minutes, pendant laquelle, JMeter va graduellement augmenter le nombre de threads pour passer de 1 à 30, puis il va continuer avec ce nombre de threads pendant 10 minutes, jusqu’à l’arrêt du test.</p>



<p>Le graphique du nombre de threads en fonction du temps est le suivant :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/uK9jR8hX9NboPImyiOynbeKQUvBurOCfZmE2J-aeZkpQIFGia2GU4KICp2DKFK56UWfhbOXzrl47twBPWwoTrT6JvO3_r6PHMMRYIDhDu9mbaYjPSeeqDt0ll04jGk10Xc21Cqgi" alt=""/></figure>



<p>On peut remarquer que si la durée du “Ramp-up” fait les ⅔ de la durée totale, alors les surfaces A et B ci-dessous sont égales :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/lfu_rEX2v8kyF8JEyG2eIPCVD4-lpqNhBwJcFpZd5fFlEOQJ1KiSHXlfOP_UaRPs2jhFqf8gAqkbPOVbzSlkS2cgtlEwKcaYl1AvLyTiiGjDOuM7lCQhCFuOUQgS980PWWx_L4QL" alt=""/></figure>



<p>Si le nombre de conversion réalisées par JMeter pendant toute la durée du tir vaut N, alors, le nombre de conversions effectuées pendant la période nominale, ici, les 10 dernières minutes, vaut la moitié, soit N/2.</p>



<p>On peut dire que le nombre de conversions à l’heure vaut N/2&#215;6, soit 3N conversions à l’heure.</p>



<p>Si les statistiques de la boutique indiquent un taux de conversion de 5%, alors, en ajoutant des scénarios sans conversion et en multipliant le nombre de threads par 20, on simulerait l’audience de la boutique.</p>



<p>Pour calculer l’audience équivalente au tir ci-dessus, on peut dire qu’on a 3Nx20 visiteurs à l’heure. Comme une session dans les usages du Web est comptabilisée après 30 minutes d’inactivité, on peut dire qu’on a un équivalent de 2x3Nx20 sessions simultanées.</p>



<p>Comment estimer le trafic quotidien et mensuel ?</p>



<p>La réponse dépend largement du type du site et des habitudes de fréquentation.</p>



<p>On peut se lancer dans un calcul à la louche, sachant qu’on obtient des ordres de grandeur et qu’il faut adapter le calcul en fonction des statistiques du site.</p>



<p>Si on estime que l’heure du pic d’affluence représente 20% du trafic de la journée, dans notre cas 3Nx20 visiteurs, pour la journée on en aurait 5 fois plus, soit Nx300 visites par jour.</p>



<p>Reste à extrapoler au mois. Si on considère que le jour le plus chargé représente 10% des visites du mois, on aurait Nx3000 visites par mois !</p>



<p>Si N vaut 100, notre tir produirait une charge équivalente à :</p>



<ul class="wp-block-list"><li>300 commandes à l’heure,</li><li>30 000 visites par jour,</li><li>300 000 visites par mois.</li></ul>
<p>L’article <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tests de charge : Un peu d’histoire</title>
		<link>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/</link>
					<comments>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 23 Jul 2021 16:23:28 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1065</guid>

					<description><![CDATA[<p>Ou plutôt pourquoi je me suis remis à faire des tests…..<br />
En 1996, lorsque j’ai travaillé sur le premier site Web bancaire français, j'ai mis au point mon premier outil de test car il n’y avait aucun produit pour accomplir cette tâche....</p>
<p>L’article <a href="https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/">Tests de charge : Un peu d’histoire</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ou plutôt pourquoi je me suis remis à faire des tests…..</p>



<p>Il y a deux objectifs dans ma démarche :</p>



<ol class="wp-block-list"><li>améliorer les sites de nos clients. Les tests de charge permettent d’apprécier le comportement d’un site lors de fortes audiences et de détecter les éventuelles contentions.</li><li>développer la maîtrise du Web chez les développeurs. A travers la mise au point des scénarios, on apprend comment un navigateur dialogue avec un site Web. C’est une brique essentielle dans la fabrication des sites Web.</li></ol>



<h3 class="wp-block-heading">Un sujet récurrent depuis le début du Web</h3>



<p>On connaît tous l’importance des temps de réponse et les problématiques d&rsquo;audience des sites Web.</p>



<p>En 1996, lorsque j’ai travaillé sur le premier site Web bancaire français, j&rsquo;ai mis au point mon premier outil de test car il n’y avait aucun produit pour accomplir cette tâche. J’ai utilisé l’inoxydable Telnet pour simuler des connexions, des scénarios et des tests de charge !</p>



<p>A cette époque, Telnet sur HP-UX permettait d’injecter des requêtes HTTP avec un pipe.</p>



<p>Ca donnait des commandes de ce type :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">$ echo -n “GET / HTTP/1.0\n\n” | telnet tohero.fr 80
Trying 92.222.234.216...
Connected to tohero.fr.
Escape character is '^]'.
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Jul 2021 09:19:03 GMT
Content-Type: text/html
Content-Length: 194
Connection: close
Location: https://www.tohero.fr/actualites

&lt;html&gt;
&lt;head&gt;&lt;title&gt;301 Moved Permanently&lt;/title&gt;&lt;/head&gt;
&lt;body bgcolor="white"&gt;
&lt;center&gt;&lt;h1&gt;301 Moved Permanently&lt;/h1&gt;&lt;/center&gt;
&lt;hr&gt;&lt;center&gt;nginx/1.10.3 (Ubuntu)&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;
Connection closed by foreign host.
$</pre></div>



<p>Grâce à la simplicité du protocole HTTP, ça devenait (plus ou moins) facile d’injecter des requêtes POST, de stocker des cookies et de jouer un scénario avec des Shell scripts. C’est ainsi que j’ai commencé les tests de charge sur le site que j’étais en train de construire.&nbsp; J’avais baptisé ce petit programme de tests “Gator”. On s’en servait également pour les tests systèmes, fonctionnels de bout en bout. On avait déjà un ancêtre de Sélénium pour les recettes.</p>



<p>Malheureusement, la grande majorité des “Telnet” ne supportaient pas le pipe. J’ai donc réécrit Gator en Perl, ce qui a donné naissance à gator.pl</p>



<p>Cette fois le script Perl était bien plus évolué et prenait en entrée des scénarios de test sous forme de fichiers.</p>



<p>Au début des années 2000, on n’envoyait pas beaucoup d’informations dans les headers et le JavaScript ne posait pas trop de problèmes. On était capable de créer nos tests sans sniffer le trafic Web, uniquement avec la connaissance des pages à tester.</p>



<p>Néanmoins, la mise au point de ce type de tests n’était&nbsp; possible que par les développeurs. Et les années passant, je me suis dit que les scripts Perl étaient trop compliqués à maintenir et je me suis tourné vers un produit. Comme à l’époque je programmais en Java et j’utilisais <a href="https://tomcat.apache.org/" target="_blank" rel="noreferrer noopener">Tomcat</a> comme serveur applicatif, je me suis naturellement tourné vers <a href="https://jakarta.apache.org/" target="_blank" rel="noreferrer noopener">Jakarta JMeter</a>, qui faisait partie de la même suite logicielle que Tomcat, pour faire les tests de charge.</p>



<h3 class="wp-block-heading">Les RFC</h3>



<p>L’intérêt de travailler sur la mise au point des scénarios de tests de charge est de comprendre le dialogue entre un client (navigateur) et un serveur Web. Ce dialogue a été formalisé pour la première fois dans un « Request For Comment », la <a href="https://datatracker.ietf.org/doc/rfc1945/" target="_blank" rel="noreferrer noopener">RFC 1945</a> écrite en partie par Tim Berners Lee qui détaille le protocole HTTP. Par la suite d&rsquo;autres RFC , comme la <a href="https://datatracker.ietf.org/doc/rfc2068/" target="_blank" rel="noreferrer noopener">RFC 2068</a> ont complété cette documentation au fur et à mesure que le protocole s&rsquo;est enrichi. Depuis, il y a eu bien d’autres RFC qui illustrent la complexité  du dialogue entre le client Web et le serveur.</p>



<p>Depuis quelques années, cette communication est au cœur de l’optimisation de l’expérience client. Tout le monde s&rsquo;y intéresse et des logiciels comme <a href="https://developers.google.com/speed/pagespeed/insights/?hl=fr">Google PageSpeed</a> qui font aujourd’hui le bonheur des agences digitales, décortiquent en détail cette communication. On parle ici des <strong>performances d’un site</strong>. </p>



<p>Les tests de charge supposent idéalement que le site est déjà performant. On constate en pratique qu’un site performant supporte mieux la charge qu’un site peu performant. Ça veut dire que les équipes qui ont travaillé sur le projet étaient déjà sensibles à la performance. </p>



<p>Pour autant les tests de charges vont permettre de trouver des optimisations liées aux pics d&rsquo;audience. C’est leur objectif premier, mais on peut trouver bien d’autres contentions ou imperfections avec ce type de tests !</p>
<p>L’article <a href="https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/">Tests de charge : Un peu d’histoire</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
