<?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; Test fonctionnel</title>
	<atom:link href="http://blog.milamberspace.net/index.php/category/test-fonctionnel/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>Apache JMeter 2.6 est sorti</title>
		<link>http://blog.milamberspace.net/index.php/2012/02/01/apache-jmeter-2-6-est-sorti-1061.html</link>
		<comments>http://blog.milamberspace.net/index.php/2012/02/01/apache-jmeter-2-6-est-sorti-1061.html#comments</comments>
		<pubDate>Wed, 01 Feb 2012 23:12:10 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[2.6]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=1061</guid>
		<description><![CDATA[Voici la première version de JMeter depuis la promotion du projet en tant que Top Level Domain (TLP) chez Apache. Pour rappel, JMeter était un sous projet de Jakarta, et était également le dernier de ses sous projets, les autres étant déjà devenu TLP. La version 2.6 est une version qui apporte de jolies améliorations [...]]]></description>
			<content:encoded><![CDATA[<p>Voici la première version de JMeter depuis la promotion du projet en tant que Top Level Domain (TLP) chez Apache. Pour rappel, JMeter était un sous projet de Jakarta, et était également le dernier de ses sous projets, les autres étant déjà devenu TLP.</p>
<p>La version 2.6 est une version qui apporte de jolies améliorations tout en amenant son lot de corrections d&#8217;anomalies.</p>
<p><span style="text-decoration: underline;">Voici quelques captures de quelques nouveautés importantes :</span><span id="more-1061"></span></p>
<p>La plus &#8216;remarquable&#8217; c&#8217;est l&#8217;ajout d&#8217;une barre d&#8217;outils sur la fenêtre principale de JMeter, qui permet d&#8217;avoir à portée de clic les principales actions de JMeter (dont le lancement d&#8217;un tir).</p>
<p><img class="aligncenter" title="JMeter 2.6 barre d'outils" src="/wp-content/images/jmeter-version-2-6/jmeter_26_01.png" alt="" width="994" height="91" /></p>
<p>Ensuite, une amélioration qui me semble importante pour ceux qui utilisent JMeter pour tester des applications de type GWT RPC, SOAP/XML, etc. C&#8217;est l&#8217;ajout d&#8217;un onglet <strong>Données POST</strong> dans l&#8217;échantillon <strong>Requête HTTP</strong>. Celui-ci permet de visualiser et éditer bien plus facilement les données envoyées lors de l&#8217;exécution de la requête.</p>
<p><img class="aligncenter" title="Données POST Requête HTTP" src="/wp-content/images/jmeter-version-2-6/jmeter_26_02.png" alt="" width="949" height="404" /></p>
<p>Dans le genre &#8216;quick and dirty&#8217;, c&#8217;est-à-dire lorsque vous devez faire un test de charge rapide pour un client (ou chef) qui vous le demande à la dernière minute genre à 17h30 un vendredi soir (si vous ce que je veux dire&#8230;;-)), voici le récepteur <strong>Graphique agrégé</strong> amélioré :</p>
<p><img class="aligncenter" title="GOptions Graphique Agregé" src="/wp-content/images/jmeter-version-2-6/jmeter_26_03.png" alt="" width="1007" height="640" /></p>
<p>De nombreuses options de personnalisation du graphique généré ont été ajoutées, par exemple la possibilité de filtrer par le nom via une regexp les résultats à grapher, ou bien la possibilité de fixer l&#8217;échelle des ordonnées à une valeur permettant la comparaison aisée avec un graphique d&#8217;un premier tir.</p>
<p><img class="aligncenter" title="Graphique Agrégé JMeter 2.6" src="/wp-content/images/jmeter-version-2-6/jmeter_26_04.png" alt="" width="1017" height="405" /></p>
<p>Une petite boîte de dialogue qui peut sauver des heures de travail : la confirmation de la suppression. Si vous avez déjà utiliser JMeter, vous avez peut-être comme moi déjà eu « l&#8217;accident de suppression », sans le faire exprès vous avez supprimé un noeud de l&#8217;arbre important, genre un <strong>Groupe d&#8217;unités</strong> ou un <strong>Contrôleur Transaction</strong> avec plein de fils. Et là c&#8217;est la catastrophe ! vous n&#8217;avez pas sauvegarder votre script depuis un bon moment, et toutes votre variabilisation est perdue&#8230; En effet, JMeter n&#8217;a pas (encore) de fonctionnalité de retour en arrière (le fameux Ctrl-Z). Tout cela pour dire que cette petite boîte de dialogue va certainement être utile. NB. La fonctionnalité de retour arrière va peut-être être intégrée dans une future version de JMeter, un patch ayant été proposé et est en cours d&#8217;évaluation.</p>
<p><img class="aligncenter" title="Confirmation de suppresion JMeter 2.6" src="/wp-content/images/jmeter-version-2-6/jmeter_26_05.png" alt="" width="667" height="212" /></p>
<p>Une autre amélioration sympathique pour (par exemple) ceux qui utilisent beaucoup des scripts BeanShell (ou autres langages), c&#8217;est la console de visualisation du fichier journal de JMeter (le jmeter.log).</p>
<p><img class="aligncenter" title="Menu Afficher la console JMeter 2.6" src="/wp-content/images/jmeter-version-2-6/jmeter_26_06.png" alt="" width="408" height="182" /></p>
<p>Cette console permettant donc de voir les messages informatifs et d&#8217;erreurs lors de l&#8217;exécution de JMeter. Utile donc pour la mise au point de script BeanShell ou pour surveiller le bon fonctionnement de JMeter.</p>
<p><img class="aligncenter" title="Console JMeter 2.6" src="/wp-content/images/jmeter-version-2-6/jmeter_26_07.png" alt="" width="1103" height="441" /></p>
<p>La version 2.6 de JMeter a plein <a href="http://jmeter.apache.org/changes.html">d&#8217;autres nouveautés</a>, étant donné que la présentation de ces nouveautés a été aussi améliorée, je vous invite à suivre<a href="http://jmeter.apache.org/changes.html"> ce lien pour avoir encore plus</a> de capture d&#8217;écran des nouveautés et aussi consulter la liste exhaustive des anomalies corrigées.</p>
<p>Dans tous les cas, la montée en version est recommandée.</p>
<p>Bon courage dans vos aventures JMeter !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2012/02/01/apache-jmeter-2-6-est-sorti-1061.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter : Déterminer automatiquement le chemin d&#8217;un fichier Source de données CSV en fonction de son système d&#8217;exploitation</title>
		<link>http://blog.milamberspace.net/index.php/2011/11/12/jmeter-determiner-automatiquement-le-chemin-dun-fichier-source-de-donnees-csv-en-fonction-de-son-systeme-dexploitation-1009.html</link>
		<comments>http://blog.milamberspace.net/index.php/2011/11/12/jmeter-determiner-automatiquement-le-chemin-dun-fichier-source-de-donnees-csv-en-fonction-de-son-systeme-dexploitation-1009.html#comments</comments>
		<pubDate>Sat, 12 Nov 2011 18:26:52 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[test distribué]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=1009</guid>
		<description><![CDATA[Ce billet est inspiré ce commentaire de Vincent D. Merci à lui pour son commentaire et son autorisation d&#8217;utilisation dans ce billet. Imaginez que vous devez faire un test de charge distribué avec un poste contrôleur et deux postes injecteurs. Malheureusement, vos injecteurs n&#8217;ont pas le même système d&#8217;exploitation que votre poste contrôleur. Ce dernier [...]]]></description>
			<content:encoded><![CDATA[<p><em>Ce billet est inspiré <a href="http://blog.milamberspace.net/index.php/jmeter-pages/jmeter-variabilisation-de-donnees/comment-page-1#comment-1444">ce commentaire de Vincent D</a>. Merci à lui pour son commentaire et son autorisation d&#8217;utilisation dans ce billet.</em></p>
<p>Imaginez que vous devez faire un test de charge distribué avec un poste contrôleur et deux postes injecteurs. Malheureusement, vos injecteurs n&#8217;ont pas le même système d&#8217;exploitation que votre poste contrôleur. Ce dernier est sous Windows, et les injecteurs sont sous Linux.</p>
<p>Dans votre script JMeter, il y a un élément <strong>Source de données CSV</strong> qui vous permet (par exemple) d&#8217;avoir une liste d&#8217;identifiants/mot de passe de connexion.</p>
<p>Lors de la mise au point de votre script JMeter, vous utilisez seulement votre poste contrôleur, et la valeur du champ <strong>Nom de fichier</strong> dans votre <strong>Source de données CSV</strong> est :</p>
<pre>c:/Temp/liste_login.csv</pre>
<p>Ce chemin est valable sous Windows, mais bien entendu, ne sera pas valable sur vos injecteurs lorsque vous allez lancer le test distribué.</p>
<p>Juste avant ce test, il faut modifier le script JMeter pour changer la valeur du Nom de fichier par :</p>
<pre>/tmp/liste_login.csv</pre>
<p>Facile à faire, mais aussi facile à oublier de faire&#8230;</p>
<p>Voici un moyen de le faire automatiquement.<span id="more-1009"></span></p>
<p>Ci-dessous un plan de test d&#8217;exemple :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Plan de test" src="/wp-content/images/jmeter-39-chemin-os/jmeter_chemin_os_017.png" alt="" width="259" height="188" /></p>
<p>Par rapport au commentaire de Vincent D. j&#8217;ajoute un élément<a title="JMeter Manuel Groupes d'unités de début" href="http://jmeter.apache.org/usermanual/component_reference.html#setUp_Thread_Group"><strong> Groupe d&#8217;unités de début</strong></a>. Ce dernier permet de réaliser l&#8217;opération de définition du chemin de fichier <strong><span style="text-decoration: underline;">avant</span></strong> n&#8217;importe quel autre <strong>Groupe d&#8217;unités</strong>.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Groupe d'unités de début" src="/wp-content/images/jmeter-39-chemin-os/jmeter_chemin_os_018.png" alt="" width="390" height="266" /></p>
<p>Donc, dans le Groupe d&#8217;unités de début, on place un Échantillon BeanShell qui va contenir un simple bout de code (Java) pour :</p>
<ol>
<li>Récupérer le nom du système d&#8217;exploitation (depuis les Propriétés Java)</li>
<li>Faire un test sur le nom « windows », si oui on créé une propriété JMeter « CHEMIN » qui aura la valeur du chemin dans le poste Windows</li>
<li>Sinon, ce sera le chemin Linux / Unix et Mac</li>
</ol>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="BeanShell de détermination du système d'exploitation et définition du chemin en propriétés JMeter" src="/wp-content/images/jmeter-39-chemin-os/jmeter_chemin_os_019.png" alt="" width="407" height="281" /></p>
<p>Le code :</p>
<pre>String sOs = System.getProperty("os.name").toLowerCase();
 if (sOs.contains("windows")) {
 props.setProperty("CHEMIN", "c:/Temp/");
 } else {
 // couvre Linux/Unix/Mac
 props.setProperty("CHEMIN", "/tmp/");
 }</pre>
<p>On notera que le chemin est déposé dans une propriété JMeter (et non une variable JMeter), car la propriété JMeter se propage à travers les Groupes d&#8217;unités, ce qui n&#8217;est pas le cas de la variable JMeter.</p>
<p>Ensuite, on peut donc utiliser notre propriété CHEMIN dans l&#8217;élément Source de données CSV pour avoir un chemin adapté en fonction du système d&#8217;exploitation.</p>
<p>On utilisera la fonction JMeter __P() pour récupérer la valeur de la propriété CHEMIN :</p>
<pre>${__P(CHEMIN)}</pre>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Utilisation de la propriété du chemin" src="/wp-content/images/jmeter-39-chemin-os/jmeter_chemin_os_020.png" alt="" width="525" height="289" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2011/11/12/jmeter-determiner-automatiquement-le-chemin-dun-fichier-source-de-donnees-csv-en-fonction-de-son-systeme-dexploitation-1009.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer un email avec JMeter via son élément Requête SMTP</title>
		<link>http://blog.milamberspace.net/index.php/2011/07/03/envoyer-un-email-avec-jmeter-via-son-element-requete-smtp-924.html</link>
		<comments>http://blog.milamberspace.net/index.php/2011/07/03/envoyer-un-email-avec-jmeter-via-son-element-requete-smtp-924.html#comments</comments>
		<pubDate>Sun, 03 Jul 2011 17:10:16 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[SMTP]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=924</guid>
		<description><![CDATA[Ce billet est un petit « howto » pour vous montrer comment utiliser JMeter pour envoyer un email (courriel), ici en utilisant le serveur de messagerie SMTP de Google Mail. Pour rappel, le SMTP (Simple Message Transfer Protocol) est le protocole normalisé d&#8217;échange de message électronique (email). Dans JMeter depuis la version 2.4, un nouvel échantillon appelé [...]]]></description>
			<content:encoded><![CDATA[<p>Ce billet est un petit « howto » pour vous montrer comment utiliser JMeter pour envoyer un email (courriel), ici en utilisant le serveur de messagerie SMTP de Google Mail.</p>
<p>Pour rappel, le <a href="http://fr.wikipedia.org/wiki/SMTP">SMTP</a> (Simple Message Transfer Protocol) est le protocole normalisé d&#8217;échange de message électronique (email). Dans JMeter depuis la version 2.4, un nouvel échantillon appelé Requête SMTP a été ajouté pour avoir un client SMTP qui envoi donc un email.</p>
<p>Bien entendu, JMeter étant un outil de test de charge, avec cet échantillon, on peut faire un test de charge sur un serveur de messagerie franchement installé pour vérifier sa tenue de charge et robustesse (ce qui est mon cas), on peut aussi utiliser cet échantillon SMTP pour par exemple s&#8217;envoyer un email de rapport à la fin d&#8217;un test de charge « long » (qui dure plusieurs heures ou jours), ou tout simplement dans le cadre de la mise en place d&#8217;un système d&#8217;alerte en cas de temps de réponse dégradé d&#8217;un site web (par exemple) avec un script qui s&#8217;exécute toutes les x minutes ou heures.</p>
<p>Revenons à notre sujet, voici notre arbre JMeter tout simple pour ce test :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Arbre JMeter pour SMTP" src="/wp-content/images/jmeter-35-requete-smtp/01-jmeter-requete-smtp.png" alt="" width="253" height="102" /></p>
<p><span id="more-924"></span>Et voici l&#8217;exemple d&#8217;échantillon SMTP configuré pour envoyer un message de test en utilisant les serveurs de Gmail :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête SMTP JMeter" src="/wp-content/images/jmeter-35-requete-smtp/02-jmeter-requete-smtp.png" alt="" width="1001" height="736" /></p>
<p><em>NB : ici est présenté l&#8217;échantillon SMTP de la future version 2.4.1 (en date du billet)</em></p>
<p>Rien de méchant en soit, si vous utilisez votre compte Gmail en accès SMTP/POP ou SMTP/IMAP, la plupart de ces paramètres vous rappellerons quelque chose. Sinon, voici quelques commentaires, section par section.</p>
<p>Section <strong>Paramètres du serveur</strong> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête SMTP section Paramètres du serveur" src="/wp-content/images/jmeter-35-requete-smtp/03-jmeter-requete-smtp.png" alt="" width="799" height="156" /></p>
<p>Juste au-dessus de la section, il y a bien entendu la traditionnelle section d&#8217;identification de l&#8217;échantillon et le champ <em>Commentaires</em>.</p>
<ul>
<li> <span style="text-decoration: underline;">Serveur :</span> ici on indique le nom ou l&#8217;adresse IP du serveur SMTP</li>
<li> <span style="text-decoration: underline;">Port : </span>il existe plusieurs ports « officiels » pour le SMTP, le premier et plus ancien est le 25, sa version avec une couche SSL pour le chiffrement du transport sur le réseau est 465 (SMTPS), et une version permettant de chiffrement la partie authentification lors de l&#8217;établissement d&#8217;une session SMTP via StartTLS est le port 587. Chez GMail, on a la possibilité d&#8217;avoir ces trois ports ouverts.</li>
</ul>
<p>Section <strong>Paramètres du courriel</strong> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête SMTP JMeter Section Paramètres du courriel" src="/wp-content/images/jmeter-35-requete-smtp/04-jmeter-requete-smtp.png" alt="" width="782" height="138" /></p>
<p>Ici c&#8217;est assez clair pour toute personne qui a déjà envoyée un email.</p>
<p>Section <strong>Paramètres d&#8217;authentification</strong> :</p>
<p style="text-align: left;"><img class="aligncenter" style="border: 1px solid black;" title="Section Paramètres d'authentification" src="/wp-content/images/jmeter-35-requete-smtp/05-jmeter-requete-smtp.png" alt="" width="791" height="71" /><br />
Lors d&#8217;un envoi d&#8217;un message via SMTP, il est possible au préalable de s&#8217;identifier. C&#8217;est souvent une mesure obligatoire demandée par les serveurs de messagerie pour lutter contre le SPAM et l&#8217;usurpation d&#8217;identité d&#8217;un email. Chez Gmail, c&#8217;est obligatoire.</p>
<p style="text-align: left;">Section <strong>Paramètres de sécurité</strong> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Section Paramètres de sécurité" src="/wp-content/images/jmeter-35-requete-smtp/06-jmeter-requete-smtp.png" alt="" width="896" height="95" /></p>
<p>Ici, on en revient aux Ports et options : SMTP : 25, SMTPS : 465 et StartTLS : 587</p>
<ul>
<li> Le port 25 n&#8217;utilise pas généralement de sécurité, donc on choisira « Pas de fonctionnalité de sécurité » si on a mis 25 dans le champ Port plus haut.</li>
<li> Le port 465 utilise la couche SSL pour sécuriser le transport sur le réseau (chiffrement), donc on cochera « Utiliser SSL »</li>
<li> Et le dernier port 587, c&#8217;est la négociation StartTLS de l&#8217;authentification, qui demandera donc de cocher « Utiliser StartTLS »</li>
<li> Les autres paramètres concerne l&#8217;option « Utiliser SSL » et sont relatives aux modes d&#8217;utilisation et de confiance des certificats SSL. Pour un serveur SMTPS ayant un certificat SSL reconnu par une autorité de certification reconnue dans JAVA (donc déjà présent dans le fichier cacerts de l&#8217;environnement JAVA), il n&#8217;y a rien besoin de cocher. Par contre, si vous utilisez un certificat SSL auto-signé ou signé par une autorité de certification non reconnue, vous avez la possibilité de faire confiance à tous les certificats ou bien d&#8217;utiliser votre propre coffre de certificat local contenant la clé publique de votre autorité de certification ou certificat serveur (au lieu donc du cacerts).</li>
<li> La petite option « Force le StartTLS » est pour donc force l&#8217;utilisation de la négociation StartTLS, souvent en conjugaison avec le port 25 (car on peut avoir du StartTLS sur le port 25).</li>
</ul>
<p>Section <strong>Paramètres du message</strong> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Section Paramètres du message" src="/wp-content/images/jmeter-35-requete-smtp/07-jmeter-requete-smtp.png" alt="" width="985" height="229" /></p>
<p>Ici c&#8217;est bien entendu le cœur de l&#8217;échantillon, avec le message à envoyer. Les champs Sujet, Message et Fichier attaché sont explicites de part leurs noms.</p>
<ul>
<li> L&#8217;option « Supprimer l&#8217;entête Sujet » permet d&#8217;envoyer un message sans sujet</li>
<li> L&#8217;option « Ajouter un horodatage dans le sujet » permet d&#8217;avoir un timestamp correspondant au nombre de secondes depuis le 1er Janvier 1970 au moment de l&#8217;envoi du message</li>
<li> L&#8217;option « Envoyer le message en texte » permet de revenir à un format de message SMTP dans sa version la plus simple (format RFC 822) au lieu d&#8217;un format MIME (multipart/mixed) qui lui est plus souple pour les messages avec accents et pièce jointe.</li>
<li> Et l&#8217;option « Envoyer un message .eml » est pour envoyer un message au format EML (format d&#8217;export d&#8217;un message Outlook et utiliser dans beaucoup de client de messagerie).</li>
</ul>
<p>Section <strong>Paramètres supplémentaires :</strong></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Section Paramètres supplémentaires" src="/wp-content/images/jmeter-35-requete-smtp/08-jmeter-requete-smtp.png" alt="" width="782" height="57" /></p>
<p><span style="text-decoration: underline;">Deux dernières options :</span></p>
<ul>
<li> « Calculer la taille du message » qui fait ce que son nom indique, utile notamment dans le cas des messages avec pièces jointes et pour servir ensuite dans les statistiques de JMeter</li>
<li> « Activer les traces de débogage ? » vous permettra de voir les échanges entre JMeter et le serveur SMTP sur la sortie standard (la console généralement)</li>
</ul>
<p>Voilà, on en arrive à l&#8217;exécution de notre envoi.</p>
<p>Voici avec un récepteur Arbre de résultats, le résultat :</p>
<p style="text-align: left;"><img class="aligncenter" style="border: 1px solid black;" title="Résultat Requête SMTP" src="/wp-content/images/jmeter-35-requete-smtp/09-jmeter-requete-smtp.png" alt="" width="701" height="456" /><br />
Ce sont les champs habituels de l&#8217;arbre de résultats, avec une mention pour le Message de retour, ici, indiquant : « Message successfully sent ! » signifiant la réussite de l&#8217;envoi.</p>
<p style="text-align: left;">On peut regarder sur l&#8217;onglet Données de réponses (et aussi Requête), on trouvera le corps du message email envoyé. Ci-dessous avec un message MIME (par défaut)</p>
<p style="text-align: left;"><img class="aligncenter" style="border: 1px solid black;" title="Résultat Requête SMTP JMeter" src="/wp-content/images/jmeter-35-requete-smtp/10-jmeter-requete-smtp.png" alt="" width="776" height="209" /><br />
Et ici un message en texte pur (les balises MIME ont disparut).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Résultat Requête SMTP JMeter" src="/wp-content/images/jmeter-35-requete-smtp/11-jmeter-requete-smtp.png" alt="" width="744" height="159" /></p>
<p>Ceci clôture ce petit comment-faire pour envoyer un email avec JMeter. Bon courage.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2011/07/03/envoyer-un-email-avec-jmeter-via-son-element-requete-smtp-924.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intégration d&#8217;un test JMeter dans Hudson avec le plugin Hudson Performance</title>
		<link>http://blog.milamberspace.net/index.php/2011/04/27/integration-dun-test-jmeter-dans-hudson-avec-le-plugin-hudson-performance-879.html</link>
		<comments>http://blog.milamberspace.net/index.php/2011/04/27/integration-dun-test-jmeter-dans-hudson-avec-le-plugin-hudson-performance-879.html#comments</comments>
		<pubDate>Wed, 27 Apr 2011 21:28:38 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[Husdon]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=879</guid>
		<description><![CDATA[Hudson est une plate-forme d&#8217;intégration continue, JMeter est un outil de test de charge et aussi de tests fonctionnels (on a tendance à l&#8217;oublier, mais pour faire du test de charge, il faut savoir faire du test fonctionnel). Que diriez vous d&#8217;intégrer dans Hudson l&#8217;exécution d&#8217;un test (de charge) JMeter, et d&#8217;avoir un beau graphique [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hudson-ci.org/">Hudson</a> est une plate-forme d&#8217;intégration continue, JMeter est un outil de test de charge et aussi de tests fonctionnels<em> (on a tendance à l&#8217;oublier, mais pour faire du test de charge, il faut savoir faire du test fonctionnel)</em>. Que diriez vous d&#8217;intégrer dans Hudson l&#8217;exécution d&#8217;un test (de charge) JMeter, et d&#8217;avoir un beau graphique pour voir l&#8217;évolution des temps de réponses de votre application en fonction des &#8216;builds&#8217; Hudson / versions de votre application ?</p>
<p>La réponse à cette question est l&#8217;objet de ce tutoriel.<span id="more-879"></span></p>
<p>Les pré-requis :</p>
<ul>
<li>Un serveur Hudson (le mien est sous Linux Debian)</li>
<li>Un script JMeter pour tester une application ou tout autre chose que sait tester JMeter (voir les <a title="Tutoriels JMeter" href="http://blog.milamberspace.net/index.php/jmeter-pages">différents tutoriels sur ce même blog</a>)</li>
<li><strong>Changer le format de sortie des résultats de JMeter (au lieux de CSV, passer en JTL (xml)), pour cela, modifier dans le fichier jmeter.properties, la proprité suivante : jmeter.save.saveservice.output_format=xml</strong></li>
<li>L&#8217;installation du plugin « Hudson Performance plugin » depuis le gestionnaire des plugins intégré à Hudson, cf. la capture ci-dessous.</li>
</ul>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Installation du plugin JMeter Performance dans Hudson" src="/wp-content/images/jmeter-34-hudson/01_20110417_JMeter_integration_dans_Hudson_html_7cfc88d2.png" alt="" width="959" height="595" /></p>
<p>On va créer une nouvelle tâche dans Hudson (New Job).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Création d'une nouvelle tâche dasn Hudson" src="/wp-content/images/jmeter-34-hudson/02_20110417_JMeter_integration_dans_Hudson_html_26467644.png" alt="" width="635" height="409" /></p>
<p>&nbsp;</p>
<p>On saisit un nom de tâche, puis on sélectionne l&#8217;option « Build a free-style software project » avant de clique sur le bouton <strong>OK.</strong></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Création du projet de build" src="/wp-content/images/jmeter-34-hudson/03_20110417_JMeter_integration_dans_Hudson_html_3e22f302.png" alt="" width="624" height="481" /></p>
<p>Dans le formulaire de configuration de la tâche, dans la section <strong>Build</strong> on choisit l&#8217;invocation d&#8217;un script Ant.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Invocation script Ant dans Hudson" src="/wp-content/images/jmeter-34-hudson/04_20110417_JMeter_integration_dans_Hudson_html_m534d64ff.png" alt="" width="540" height="179" /></p>
<p>Dans la configuration de l&#8217;invocation de Ant, on saisit la cible « all », et on ajoute dans les propriétés :</p>
<pre>jmeter.dir=/var/lib/hudson/jobs/TestJMeter/jakarta-jmeter-2.4.1</pre>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Configuration de la tâche Ant" src="/wp-content/images/jmeter-34-hudson/05_20110417_JMeter_integration_dans_Hudson_html_5e02afb2.png" alt="" width="765" height="336" /></p>
<p>Plus bas dans le formulaire de configuration de la tâche, on retrouve le plugin Performance. On le coche afin de l&#8217;activer.</p>
<p>Dans le champ <strong>Report files</strong> on saisit : « **/*.jtl » afin d&#8217;exécuter tous les fichiers .jtl (c&#8217;est-à-dire les fichiers script de test de JMeter) qui se trouveront dans l&#8217;espace de travail de la tâche (le workspace)</p>
<p>On pourra aussi configurer le champ <strong>Performance threshold</strong> afin de modifier le statut du « build » en fonction du pourcentage d&#8217;erreur trouvées.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Activation du plugin performance hudson" src="/wp-content/images/jmeter-34-hudson/06_20110417_JMeter_integration_dans_Hudson_html_503d61c7.png" alt="" width="788" height="255" /></p>
<p>&nbsp;</p>
<p>Voilà, c&#8217;est fini pour le formulaire de configuration de la tâche, il faut bien entendu enregistrer le formulaire.</p>
<p>Maintenant, on entre dans une petite phase de &laquo;&nbsp;ligne de commande&nbsp;&raquo; afin de préparer son workspace.</p>
<p>On dépose sur le serveur Hudson, l&#8217;archive de JMeter (le tgz plutôt que le zip afin d&#8217;avoir les bons droits positionnés sur les fichiers).</p>
<p>Dans notre cas, l&#8217;archive jakarta-jmeter-2.4.1.tgz <em>(nb. j&#8217;utilise une version de test de JMeter, la 2.4.1 n&#8217;est pas encore sortie à ce jour)</em> est positionné dans /var/lib/hudson/jobs/TestJMeter</p>
<p>Ensuite on procède à la décompression de l&#8217;archive :</p>
<pre>hudson@hudson:~/jobs/TestJMeter$ tar xfz jakarta-jmeter-2.4.1.tgz</pre>
<p>On créé quelques répertoires :</p>
<pre>hudson@hudson:~/jobs/TestJMeter$ mkdir workspace</pre>
<pre>hudson@hudson:~/jobs/TestJMeter$ mkdir workspace/scripts</pre>
<p>On copie le fichier script JMeter dans le répertoire ci-dessous :</p>
<pre>hudson@hudson:~/jobs/TestJMeter$ cp /tmp/test_webservices.jmx workspace/scripts</pre>
<p>On édite le fichier de la tâche JMeter/Ant avec le contenu suivant :</p>
<pre>hudson@hudson:~/jobs/TestJMeter$ vi workspace/build.xml</pre>
<pre>&lt;project default="all"&gt;
 &lt;!-- Define an environment variable pointing to JMETER folder or change this --&gt;
 &lt;property environment="env"/&gt;
 &lt;property name="jmeter-home" location="${jmeter.dir}"/&gt;
 &lt;!-- Should report include response data for failures? --&gt;
 &lt;property name="show-data" value="y"/&gt;
 &lt;!-- ant-jmeter.jar comes with jmeter, be sure this is the release you have --&gt;
 &lt;path id="ant.jmeter.classpath"&gt;
     &lt;fileset dir="${jmeter-home}/extras"&gt;
         &lt;include name="ant-jmeter*.jar"/&gt;
     &lt;/fileset&gt;
 &lt;/path&gt;
 &lt;taskdef
     name="jmeter"
     classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"
     classpathref="ant.jmeter.classpath" /&gt;
 &lt;target name="clean"&gt;
     &lt;delete dir="results"/&gt;
     &lt;delete file="jmeter.log"/&gt;
     &lt;mkdir dir="results/jtl"/&gt;
     &lt;mkdir dir="results/html"/&gt;
 &lt;/target&gt;
 &lt;target name="test" depends="clean"&gt;
     &lt;jmeter
          jmeterhome="${jmeter-home}"
          resultlogdir="results/jtl"&gt;
          &lt;testplans dir="scripts" includes="*.jmx"/&gt;
     &lt;/jmeter&gt;
 &lt;/target&gt;

 &lt;property name="lib.dir" value="${jmeter-home}/lib"/&gt;
 &lt;!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ --&gt;
 &lt;path id="xslt.classpath"&gt;
     &lt;fileset dir="${lib.dir}" includes="xalan*.jar"/&gt;
     &lt;fileset dir="${lib.dir}" includes="serializer*.jar"/&gt;
 &lt;/path&gt; 

 &lt;!-- This is not needed for the plugin, but it produces a nice html report
 which can be saved usin hudson's archive artifact feature --&gt;
 &lt;target name="report" depends="test"&gt;
     &lt;xslt
         classpathref="xslt.classpath"
         basedir="results/jtl"
         destdir="results/html"
         includes="*.jtl"
         style="${jmeter-home}/extras/jmeter-results-detail-report_21.xsl"&gt;
         &lt;param name="showData" expression="${show-data}"/&gt;
     &lt;/xslt&gt;
     &lt;!-- add images for best report display --&gt;
     &lt;copy file="${jmeter-home}/extras/expand.jpg" tofile="results/html/expand.jpg"/&gt;
     &lt;copy file="${jmeter-home}/extras/collapse.jpg" tofile="results/html/collapse.jpg"/&gt;
 &lt;/target&gt;
 &lt;target name="all" depends="test, report"/&gt;
&lt;/project&gt;</pre>
<p>Une fois que le fichier build.xml est enregistré, revenir sur l&#8217;interface de gestion de Hudson. Au niveau de son projet, choisir le lien « Build Now » afin de lancer le premier test.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Lancement du build" src="/wp-content/images/jmeter-34-hudson/07_20110417_JMeter_integration_dans_Hudson_html_8c990ba.png" alt="" width="477" height="237" /></p>
<p>&nbsp;</p>
<p>Hudson va donc lancer le test JMeter et afficher son succès ou échec. Depuis la console de gestion Hudson, au niveau de la tâche, il est possible d&#8217;avoir la sortie de console. La capture d&#8217;écran montre un exemple d&#8217;exécution réussie.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Sorite console pour le build hudson" src="/wp-content/images/jmeter-34-hudson/08_20110417_JMeter_integration_dans_Hudson_html_17036ef0.png" alt="" width="845" height="652" /></p>
<p>&nbsp;</p>
<p>Sur la page d&#8217;accueil du projet dans Husdon, après quelques exécutions de « build », de nouveau graphiques apparaissent. Le lien <strong>Performance Trend</strong> permet d&#8217;avoir le détail des indicateurs de performances.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Page d'accueil du projet avec les graphiques du test (quand il n'y a qu'un seul jtl)" src="/wp-content/images/jmeter-34-hudson/09_20110417_JMeter_integration_dans_Hudson_html_38e33079.png" alt="" width="1063" height="572" /></p>
<p>&nbsp;</p>
<p>La capture ci-dessous montre les graphiques des indicateurs de performance.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Ecran Performance Trend" src="/wp-content/images/jmeter-34-hudson/10_20110417_JMeter_integration_dans_Hudson_html_m2f1373d1.png" alt="" width="794" height="419" /></p>
<p>Il est également possible de consulter le rapport HTML produit par la tâche JMeter/Ant. Pour cela, on se place sur la section Workspace, puis results &gt; html et on clique sur le fichier HTML.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="rapport HTML produit par la tâche JMeter/Ant" src="/wp-content/images/jmeter-34-hudson/11_20110417_JMeter_integration_dans_Hudson_html_5525e859.png" alt="" width="662" height="259" /></p>
<p>La capture d&#8217;écran ci-dessous montre le rapport HTML produit par la tâche JMeter/Ant.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Rapport HTML produit par la tâche JMeter/Ant" src="/wp-content/images/jmeter-34-hudson/12_20110417_JMeter_integration_dans_Hudson_html_1d15a588.png" alt="" width="1041" height="447" /></p>
<p>Et voilà pour ce petit tutoriel de « mise en liaison » de JMeter et Hudson.</p>
<p>Bien entendu, en disposant des tâches hudson habituelles de construction d&#8217;une release de son application (récupération SVN, compilation, ear/war et déploiement sur un serveur de test) avant l&#8217;exécution du test JMeter et la génération du rapport, on a un cycle de release avec test de charge.</p>
<p>./</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2011/04/27/integration-dun-test-jmeter-dans-hudson-avec-le-plugin-hudson-performance-879.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JMeter : le testeur d&#8217;expression régulière</title>
		<link>http://blog.milamberspace.net/index.php/2010/12/18/jmeter-le-testeur-dexpression-reguliere-784.html</link>
		<comments>http://blog.milamberspace.net/index.php/2010/12/18/jmeter-le-testeur-dexpression-reguliere-784.html#comments</comments>
		<pubDate>Sat, 18 Dec 2010 20:36:48 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[Testeur]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=784</guid>
		<description><![CDATA[Depuis la version 2.4 de JMeter, un nouvel sous-élément du récepteur Arbre de résultats est apparu, il s&#8217;agit du Testeur de RegExp. Avant de vous montrer comment le trouver et l&#8217;utiliser, parlons-en un peu. Comme vous le savez peut-être, JMeter dispose d&#8217;un élément Extracteur Expression régulière dans la catégorie Post-processeurs. La vocation de cet élément [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis la version 2.4 de JMeter, un nouvel sous-élément du récepteur <strong>Arbre de résultats</strong> est apparu, il s&#8217;agit du <strong>Testeur de RegExp</strong>.</p>
<p>Avant de vous montrer comment le trouver et l&#8217;utiliser, parlons-en un peu.</p>
<p>Comme vous le savez peut-être, JMeter dispose d&#8217;un élément <strong>Extracteur Expression régulière</strong> dans la catégorie <strong>Post-processeurs</strong>. La vocation de cet élément <strong>Extracteur Expression régulière</strong> est d&#8217;extraire à partir d&#8217;une expression régulière une ou plusieurs chaînes de caractères depuis la réponse reçue d&#8217;un échantillon de test. La puissance en termes d&#8217;extraction de données de cet élément est très forte, cependant, il est parfois peu aisée de trouver du premier coup la bonne expression régulière qui fera ce que vous voulez. En effet, vous devez jouer et rejouer le scénario pour tester votre expression régulière tant qu&#8217;elle n&#8217;est pas au point.</p>
<p>C&#8217;est là qu&#8217;intervient le <strong>Testeur de RegExp</strong>.<span id="more-784"></span></p>
<p>Vous l&#8217;avez déjà compris avec son nom, cet élément est un testeur d&#8217;expression régulière &laquo;&nbsp;au format JMeter&nbsp;&raquo;. Ce testeur ne se branche pas sur un échantillon, mais est un type de visualiseur du récepteur <strong>Arbre de résultats</strong>, ce qui signifie que vous allez pouvoir effectuer des tests d&#8217;expression régulière directement sur les résultats d&#8217;échantillons se trouvant dans un <strong>Arbre de résultats</strong>.</p>
<p>Par exemple, si vous avez suivi ce petit billet sur <a href="http://blog.milamberspace.net/index.php/2010/12/01/jmeter%C2%A0-sauvegarder-dans-un-fichier-votre-session-de-navigation-lors-de-lenregistrement-de-vos-scenarios-fonctionnels-778.html">l&#8217;enregistrement de votre scénario fonctionnel pour une réutilisation à froid</a>, ou bien que vous avez exécuté une fois votre scénario de test et qu&#8217;il y a un problème sur une expression régulière, le tout avec un <strong>Arbre de résultats</strong>, vous pourrez utiliser le<strong> Testeur d&#8217;expression régulière (de RegExp)</strong> pour créer ou valider votre expression régulière.</p>
<p>La capture d&#8217;écran ci-dessous montre le menu permettant d&#8217;accéder au testeur depuis un <strong>Arbre de résultats</strong>.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Testeur de RegExp JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips04.png" alt="" width="450" height="653" /></p>
<p>Ensuite dans le champ <em>Expression régulière,</em> il suffit de saisir son expression régulière (en suivant le format de JMeter, à savoir <a href="http://jakarta.apache.org/oro/">Jakarta ORO</a>).</p>
<p>Dans l&#8217;exemple ci-dessous, l&#8217;expression régulière est &laquo;&nbsp;debian(.+?).html&nbsp;&raquo;, signifiant : tout ce qui commence par debian et se termine par .html avec au milieu n&#8217;importe quoi. Les parenthèses indiquant que l&#8217;on souhaite récupérer ce &laquo;&nbsp;n&#8217;importe quoi&nbsp;&raquo; (dans une variable JMeter dans le cas d&#8217;un Extracteur RegExp)</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Utilisation de Testeur de RegExp JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips05.png" alt="" width="592" height="520" /></p>
<p>Dans le champ texte de la réponse du <strong>Testeur de RegExp</strong>, on trouve les éléments de réponses suivants :</p>
<pre>Match count: 6
Match[1][0]=debian-squeeze-772.html
Match[1][1]=-squeeze-772.
Match[2][0]=debian-squeeze-772.html
Match[2][1]=-squeeze-772.
Match[3][0]=debian-squeeze-6-0-762.html
Match[3][1]=-squeeze-6-0-762.
Match[4][0]=debian.org/releases/testing/index.fr.html
Match[4][1]=.org/releases/testing/index.fr.
Match[5][0]=debian-squeeze-6-0-762.html
Match[5][1]=-squeeze-6-0-762.
Match[6][0]=debian-squeeze-6-0-762.html
Match[6][1]=-squeeze-6-0-762.</pre>
<p>La première ligne signifie qu&#8217;il y a eu 6 correspondances trouvées pour l&#8217;expression régulière.</p>
<p>Ensuite, on a des groupements &laquo;&nbsp;matrice&nbsp;&raquo;, les correspondances sont indiquées sur deux lignes (ou plus, c&#8217;est en fonction du nombre de parenthèses indiquant les sections à récupérer). Pour les lignes 2 et 3 :</p>
<ul>
<li>la première donne la chaîne 	complète de correspondance de l&#8217;expression régulière</li>
<li>la deuxième donnant la valeur 	voulant être récupérée (le n&#8217;importe quoi des parenthèses)</li>
</ul>
<p>Les lignes suivantes indiquant les autres correspondances en suivant le même modèle.</p>
<p>Si l&#8217;élément <strong>Testeur de RegExp</strong> ne vous donne pas de réponse (écran blanc), c&#8217;est qu&#8217;il y a un problème dans le format de votre expression régulière.</p>
<p>Si vous êtes satisfait de votre expression régulière, il ne vous reste plus qu&#8217;à la copier/coller dans un élément <strong>Extracteur Expression régulière</strong>.</p>
<p>Pour plus d&#8217;aide sur les expressions régulières, j&#8217;ai fait les quelques billets suivants :</p>
<ul>
<li><a href="http://blog.milamberspace.net/index.php/2009/12/31/quelques-cas-dutilisation-de-lextracteur-dexpression-reguliere-dans-jmeter-554.html">Quelques cas d’utilisation de l’extracteur d’expression régulière dans JMeter</a></li>
<li><a href="http://blog.milamberspace.net/index.php/2009/03/08/jmeter-trouver-le-bon-element-dans-une-liste-avec-les-expressions-regulieres-et-en-mode-ligne-unique-227.html">Trouver le bon élément dans une liste avec les expressions régulières et en mode ligne unique</a></li>
</ul>
<p><strong><em>Je profite de ce billet, pour remercier Jean-Louis et Jean-Luc, deux métrologues, qui m&#8217;ont suggéré l&#8217;idée d&#8217;ajouter ce tester d&#8217;expression régulière dans JMeter. Et Jean-Louis, de nouveau, pour m&#8217;avoir fourni un exemple de code Java avec le moteur d&#8217;expression régulière du JDK.</em></strong></p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2010/12/18/jmeter-le-testeur-dexpression-reguliere-784.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter : Sauvegarder dans un fichier votre session de navigation lors de l&#8217;enregistrement de vos scénarios fonctionnels</title>
		<link>http://blog.milamberspace.net/index.php/2010/12/01/jmeter-sauvegarder-dans-un-fichier-votre-session-de-navigation-lors-de-lenregistrement-de-vos-scenarios-fonctionnels-778.html</link>
		<comments>http://blog.milamberspace.net/index.php/2010/12/01/jmeter-sauvegarder-dans-un-fichier-votre-session-de-navigation-lors-de-lenregistrement-de-vos-scenarios-fonctionnels-778.html#comments</comments>
		<pubDate>Wed, 01 Dec 2010 07:38:26 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Enregistrer ses données]]></category>
		<category><![CDATA[JTL]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=778</guid>
		<description><![CDATA[Imaginez- vous en mission pour effectuer un test de charge avec votre logiciel favori JMeter. Vous allez suivre le processus habituel : Identifier le scénario fonctionnel qui sera rejoué par les utilisateurs virtuels Enregistrer ce scénario dans JMeter au travers d&#8217;un session de navigation avec votre navigateur Affiner le scénario (variabiliser ce qui doit l&#8217;être, ajouter [...]]]></description>
			<content:encoded><![CDATA[<p>Imaginez- vous en mission pour effectuer un test de charge avec votre logiciel favori <a href="http://jakarta.apache.org/jmeter/">JMeter</a>. Vous allez suivre le processus habituel :</p>
<ol>
<li><a href="http://blog.milamberspace.net/index.php/jmeter-test-de-charges-dun-site-web-mode-demploi/jmeter-preparer-son-scenario-fonctionnel">Identifier le scénario 	fonctionnel</a> qui sera rejoué par les utilisateurs virtuels</li>
<li><a href="http://blog.milamberspace.net/index.php/jmeter-test-de-charges-dun-site-web-mode-demploi/jmeteriser-son-scenario-fonctionnel">Enregistrer ce scénario dans 	JMeter au travers d&#8217;un session de navigation</a> avec votre navigateur</li>
<li><a href="http://blog.milamberspace.net/index.php/jmeter-test-de-charges-dun-site-web-mode-demploi/affinage-du-scenario-de-tests">Affiner le scénario</a> (variabiliser 	ce qui doit l&#8217;être, ajouter des assertions réponses, etc.)</li>
<li><a href="http://blog.milamberspace.net/index.php/jmeter-test-de-charges-dun-site-web-mode-demploi/executer-son-scenario-de-tir-de-charges">Lancer votre tir</a></li>
</ol>
<p>Le problème, c&#8217;est que vous avez accès à l&#8217;application cible pendant une période limitée, genre 15 min, ou bien que vous n&#8217;avez pas accès directement à l&#8217;application, vous devez passer un poste de travail pour accéder à l&#8217;application, ce poste étant bien entendu moins bien que votre ordinateur (genre c&#8217;est pas Linux <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )</p>
<p>Que diriez-vous d&#8217;enregistrer votre session de navigation complète, c&#8217;est-à-dire les requêtes avec leurs paramètres mais surtout les réponses reçues par le navigateur, afin de pouvoir affiner votre scénario &laquo;&nbsp;à froid&nbsp;&raquo;, sans connexion avec l&#8217;application cible, ou carrément tranquillement à la maison ?</p>
<p>Voici le mode d&#8217;emploi. <span id="more-778"></span><span style="text-decoration: underline;"><strong>Partie 1 : l&#8217;enregistrement dans un fichier.</strong></span></p>
<p>Voici, ci-dessous, un arbre d&#8217;exemple pour l&#8217;enregistrement d&#8217;une session de navigation dans un JMeter (version 2.4).</p>
<p>L&#8217;élément Serveur Proxy HTTP va capturer les requêtes HTTP effectuées par votre navigateur (ce dernier étant configuré pour utiliser JMeter comme proxy). Puis JMeter va créer les requêtes HTTP correspondantes dans le Contrôleur Enregistreur.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Arbre de JMeter pour l'enregistrement" src="/wp-content/images/jmeter30-tips/jmeter-tips01.png" alt="" width="568" height="396" /></p>
<p>Vous remarquerez la petite particularité de mon élément <strong>Serveur Proxy HTTP</strong> : il a un récepteur <strong>Arbre de résultats</strong> en tant que fils.</p>
<p>Cet Arbre de résultats permet de :</p>
<ul>
<li>De voir le détail des requêtes HTTP capturées par le proxy JMeter</li>
<li>D&#8217;enregistrer la session de navigation au format JMeter (extension .JTL) afin de pouvoir revenir sur la session &laquo;&nbsp;à froid&nbsp;&raquo; (sans connexion au serveur).</li>
</ul>
<p>Pour indiquer à JMeter que vous voulez enregistrer les données (requêtes/réponses) captées par le proxy, il faut donc un élément de type récepteur (comme mon arbre de résultats), puis dans le champ <strong>Nom du fichier</strong> il faut saisir <em>(avec ses petits doigts, sans utiliser le bouton Parcourir situé à droite)</em> le chemin complet du fichier destination. L&#8217;extension usuelle de JMeter pour ce type de fichier est .jtl.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Configurer un nom de fichier sur un récepteur JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips02.png" alt="" width="1142" height="314" /></p>
<p>Ensuite il faut cliquer sur le bouton <strong>Configurer</strong> qui se trouve à droite du nom du fichier. La fenêtre ci-dessous apparaît :</p>
<p>﻿<img class="aligncenter" title="Configure les options du fichier JTL JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips02-configure.png" alt="" width="815" height="272" /></p>
<p>Ici, on coche <strong>toutes</strong> les cases à cocher <em>(histoire de ne pas se casser la tête)</em>, puis on ferme la fenêtre.</p>
<p>Ensuite, il faut revenir dans l&#8217;élément Serveur proxy HTTP afin de <strong>le (re)démarrer</strong> pour qu&#8217;il puisse commencer à enregistrer les données lors de la navigation avec votre navigateur.</p>
<p>Voilà, maintenant vous avez un fichier JTL qui contient tout ce qu&#8217;il vous faut pour travailler tranquillement, et à froid, à l&#8217;affinage de votre script JMeter.</p>
<p><em>(Ou, autre utilisation possible : zipper le fichier jtl et l&#8217;envoyer à quelqu&#8217;un d&#8217;autre pour assistance dans votre travail.)</em></p>
<p><span style="text-decoration: underline;"><strong>Partie </strong></span><span style="text-decoration: underline;"><strong>2</strong></span><span style="text-decoration: underline;"><strong> : </strong></span><span style="text-decoration: underline;"><strong>Revoir son fichier JTL</strong></span></p>
<p>Vous êtes maintenant prêt pour travailler sur l&#8217;affinage du script, il faut donc ouvrir son fichier JTL dans JMeter.</p>
<p>Ci-dessous, un JMeter fraîchement lancé <em>(mais vous pouvez aussi le faire depuis un JMeter ayant déjà son arbre)</em> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="JMeter à vide" src="/wp-content/images/jmeter30-tips/jmeter-tips06.png" alt="" width="489" height="154" /></p>
<p>On se place sur le Plan de test, puis avec le bouton droit de la souris : <strong>Ajouter </strong>&gt; <strong>Récepteurs</strong> &gt; <strong>Arbre de résultats.</strong></p>
<p style="text-align: center;"><strong><img class="aligncenter" style="border: 1px solid black;" title="Ajout d'un arbre de résultats JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips07-arbre-de-resultats.png" alt="" width="864" height="239" /><br />
</strong></p>
<p>Ceci ajoute un nouvel élément <strong>Arbre de résultats</strong>, dans lequel on va cliquer sur le bouton <strong>Parcourir&#8230;</strong> qui est situé dans la partie à droite sur l&#8217;écran (pas dans les menus).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Bouton parcourir dans JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips07-parcourir.png" alt="" width="900" height="188" /></p>
<p>Dans la nouvelle fenêtre qui s&#8217;affiche, on recherche son fichier JTL, et on clique sur Ouvrir.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Ouvrir son fichier JTL avec JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips08-open.png" alt="" width="517" height="326" /></p>
<p>Et hop, l&#8217;arbre de résultats se remplit les données enregistrées (requêtes et surtout les réponses) :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Voir son JTL dans l'arbre de résultats JMeter" src="/wp-content/images/jmeter30-tips/jmeter-tips09-voir.png" alt="" width="1106" height="406" /></p>
<p>Y-a-pu-qu&#8217;à faire l&#8217;affinage <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ou toute autre chose que vous aimeriez.</p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2010/12/01/jmeter-sauvegarder-dans-un-fichier-votre-session-de-navigation-lors-de-lenregistrement-de-vos-scenarios-fonctionnels-778.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JMeter: petit test JMS Point à point avec ActiveMQ</title>
		<link>http://blog.milamberspace.net/index.php/2010/09/11/jmeter-petit-test-jms-point-a-point-avec-activemq-737.html</link>
		<comments>http://blog.milamberspace.net/index.php/2010/09/11/jmeter-petit-test-jms-point-a-point-avec-activemq-737.html#comments</comments>
		<pubDate>Sat, 11 Sep 2010 22:38:41 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[ActiveMQ]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[Point-à-Point]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=737</guid>
		<description><![CDATA[Nous allons, dans ce petit billet, monter un scénario JMeter pour exécuter un test d&#8217;un serveur de Messagerie Orientée Messages (MOM). Pour ce dernier, nous allons prendre Apache ActiveMQ, sachant qu&#8217;il existe d&#8217;autres MOM comme IBM WebSphere MQ (ex-MQSeries), Tibco, etc. Ici, nous allons montrer un test JMS en Point-à-Point. L&#8217;autre type de test possible [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons, dans ce petit billet, monter un scénario JMeter pour exécuter un test d&#8217;un serveur de <a href="http://fr.wikipedia.org/wiki/MOM">Messagerie Orientée Messages (MOM)</a>. Pour ce dernier, nous allons prendre <a href="http://activemq.apache.org/">Apache ActiveMQ</a>, sachant qu&#8217;il existe d&#8217;autres MOM comme IBM WebSphere MQ (ex-MQSeries), Tibco, etc.<br />
Ici, nous allons montrer un test <a href="http://fr.wikipedia.org/wiki/Java_Message_Service">JMS en Point-à-Point</a>. L&#8217;autre type de test possible en JMS est la Publication-Abonnement (Publisher-Subscriber), celui-ci fera l&#8217;objet d&#8217;un autre billet.</p>
<p>Un des pré-requis est d&#8217;avoir un serveur ActiveMQ démarré. Pour cela (et pour faire simple), il suffit de télécharger <a href="http://activemq.apache.org/download.html">les fichiers binaires depuis le site Apache ActiveMQ</a>, de décompresser l&#8217;archive, d&#8217;aller dans le répertoire de décompression et exécuter la commande suivante :</p>
<pre>./bin/activemq start</pre>
<p><span id="more-737"></span><br />
Ensuite, vous pouvez vérifier que cela fonctionne en visitant l&#8217;interface d&#8217;administration à l&#8217;adresse suivante<strong> http://localhost:8161/admin/</strong></p>
<p><strong><img class="aligncenter" title="Interface d'administration de ActiveMQ" src="/wp-content/images/jmeter29-jms-point-to-point/activemq-01.png" alt="" width="573" height="534" /><br />
</strong></p>
<p>On reviens à JMeter maintenant et notre petit tutoriel sur l&#8217;utilisation de JMeter pour tester ActiveMQ.</p>
<p>Une étape préalable est de récupérer les fichiers JAR d&#8217;ActiveMQ afin de permettre à JMeter de &laquo;&nbsp;<em>parler JMS</em>&nbsp;&raquo; avec votre serveur ActiveMQ. Le mieux est de prendre l&#8217;archive <strong>activemq-all-X.X.X.jar</strong> (X.X.X en fonction de la version) à partir du répertoire ActiveMQ décompressé, puis de placer le fichier JAR dans le répertoire<em> JMETER_HOME/lib</em>. L&#8217;aide officielle pour cette étape est <a href="http://jakarta.apache.org/jmeter/usermanual/get-started.html#libraries_activemq">ici</a>.</p>
<p>Voici maintenant notre plan de test tout simple pour illustrer un test JMS sur une file &laquo;&nbsp;point à point&nbsp;&raquo;.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Plan de test JMeter pour JMS point-à-point" src="/wp-content/images/jmeter29-jms-point-to-point/jms-point-to-point-01.png" alt="" width="492" height="204" /></p>
<p>On aura dans ce plan de test, un groupe d&#8217;unités, appelé <strong>GU Point-à-Point</strong>, avec seulement un utilisateur, qui monte en charge en une seconde et qui fera trois itérations.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Groupe d'unités JMeter pour JMS Point-à-point" src="/wp-content/images/jmeter29-jms-point-to-point/jms-point-to-point-02.png" alt="" width="422" height="276" /></p>
<p>Ensuite, on en vient à la <strong>Requête JMS Point-à-point</strong> qui va faire tout le travail. C&#8217;est-à-dire, qu&#8217;elle va déposer un message sur une file de requête (Q.REQ) et lire sur une file de réception le message qu&#8217;elle a déposé (Q.RPL).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="JMeter : Requête JMS Point-à-point" src="/wp-content/images/jmeter29-jms-point-to-point/jms-point-to-point-03.png" alt="" /></p>
<p>Voici quelques commentaires ou explications sur les champs de cet élément JMS Point-à-point :</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr valign="TOP">
<td width="17%"><strong>Champs</strong></td>
<td width="21%"><strong>Valeurs</strong></td>
<td width="62%"><strong>Commentaires</strong></td>
</tr>
<tr valign="TOP">
<td width="17%">Nom</td>
<td width="21%">JMS Point-to-Point ${__time(,TIMESTAMP)}</td>
<td width="62%">Afin de faciliter le débogage, 			j&#8217;utilise la date en secondes dans le nom de l&#8217;élément (qui 			s&#8217;affichera donc dans les récepteurs de résultats)</p>
<p>Par ailleurs, je dépose dans la variable ${TIMESTAMP} la 			valeur de la date, pour une utilisation dans le contenu du message 			(ci-dessous)</td>
</tr>
<tr valign="TOP">
<td width="17%">Fabrique QueueConnection</td>
<td width="21%">ConnectionFactory</td>
<td width="62%"></td>
</tr>
<tr valign="TOP">
<td width="17%">Nom JNDI de la file d&#8217;attente Request</td>
<td width="21%">Q.REQ</td>
<td width="62%">Le nom JNDI permettant à JMeter de faire la liaison entre la 			fabrique de connexion et la file</td>
</tr>
<tr valign="TOP">
<td width="17%">Nom JNDI de la file d&#8217;attente Receive</td>
<td width="21%">Q.RPL</td>
<td width="62%">Le nom JNDI permettant à JMeter de faire la liaison entre la 			fabrique de connexion et la file</td>
</tr>
<tr valign="TOP">
<td width="17%">Type de communication</td>
<td width="21%">Requête Réponse (ou Requête seule)</td>
<td width="62%">Ici on fait un type de communication 			Requête (dépôt) puis Réponse (récupération).</p>
<p>L&#8217;autre option possible est la requête seule (donc les 			messages doit être dépilés via soit une autre application, soit 			une requête JMS Abonnement)</td>
</tr>
<tr>
<td colspan="3" width="100%" valign="TOP">Champs alternatifs pour la correspondance de message</td>
</tr>
<tr valign="TOP">
<td width="17%">Utiliser l&#8217;ID du message Request</td>
<td width="21%">non coché</td>
<td width="62%">On peut laisser JMeter utiliser l&#8217;identifiant du message 			Request (dépôt) pour faire la corrélation entre le message 			déposé et récupéré</td>
</tr>
<tr valign="TOP">
<td width="17%">Utiliser l&#8217;ID du message Response</td>
<td width="21%">non coché</td>
<td width="62%">On peut laisser JMeter utiliser l&#8217;identifiant du message 			Responce (récupération) pour faire la corrélation entre le 			message déposé et récupéré</td>
</tr>
<tr valign="TOP">
<td width="17%">Délai (ms)</td>
<td width="21%">30000</td>
<td width="62%">Ce délai d&#8217;attente est utilisé lors de la réception du 			message (File Receive), si JMeter ne récupère rien dans le délai 			(ici de 30 sec), alors l&#8217;élément sera marqué en erreur</td>
</tr>
<tr valign="TOP">
<td width="17%">Utiliser un mode de livraison non persistant ?</td>
<td width="21%">non coché</td>
<td width="62%"></td>
</tr>
<tr valign="TOP">
<td width="17%">Contenu</td>
<td width="21%">&laquo;&nbsp;Message de test ID TEMPS = ${TIMESTAMP}&nbsp;&raquo;</td>
<td width="62%">Voici le contenu de mon message.</td>
</tr>
<tr>
<td colspan="3" width="100%" valign="TOP">Propriétés JMS</td>
</tr>
<tr valign="TOP">
<td width="17%">JMSCorrelationId</td>
<td width="21%">Milamber-${__time(,)}</td>
<td width="62%">Ici, j&#8217;ai mis mon propre identifiant de corrélation de 			message, Milamber accolé de la date (en nombre de secondes depuis 			le 1er Janvier 1970)</td>
</tr>
<tr>
<td colspan="3" width="100%" valign="TOP">Propriétés JNDI</td>
</tr>
<tr valign="TOP">
<td width="17%">Fabrique de connexion initiale</td>
<td width="21%">org.apache.activemq.jndi.ActiveMQInitialContextFactory</td>
<td width="62%">La classe à invoquer pour créer une connexion sur la 			messagerie orientée message.</td>
</tr>
<tr valign="TOP">
<td width="17%">queue.Q.REQ</td>
<td width="21%">example.A</td>
<td width="62%">Correspondance entre le nom JNDI de la file (Q.REQ) et le nom 			réel de la file dans ActiveMQ (example.A)</td>
</tr>
<tr valign="TOP">
<td width="17%">queue.Q.RPL</td>
<td width="21%">example.B</td>
<td width="62%">Correspondance entre le nom JNDI de la file (Q.RPL) et le nom 			réel de la file dans ActiveMQ (example.B)</td>
</tr>
<tr valign="TOP">
<td width="17%">URL du fournisseur</td>
<td width="21%">tcp://localhost:61616</td>
<td width="62%">L&#8217;adresse et le port pour attaquer l&#8217;ActiveMQ.</td>
</tr>
</tbody>
</table>
<p>Il ne reste plus qu&#8217;à lancer le micro-test :</p>
<p>L&#8217;arbre de résultats nous montre une exécution réussie <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><img class="aligncenter" style="border: 1px solid black;" title="JMeter : exécution du test JMS Point-à-point" src="/wp-content/images/jmeter29-jms-point-to-point/jms-point-to-point-04.png" alt="" width="814" height="669" /></p>
<p>Et là, la capture d&#8217;écran du contenu de message.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="JMeter test JMS message de reponse" src="/wp-content/images/jmeter29-jms-point-to-point/jms-point-to-point-05.png" alt="" width="805" height="204" /></p>
<p>Pour revenir à ActiveMQ et sa console, à partir de celle-ci on peut voir (surveiller) les messages déposés/lues dans les files.</p>
<p><img class="aligncenter" title="Console ActiveMQ" src="/wp-content/images/jmeter29-jms-point-to-point/activemq-02.png" alt="" width="733" height="534" /></p>
<p>On peut également voir les connexions ouvertes par JMeter pendant le tir. Au total 2 connexions (une pour le dépôt et une pour la lecture).</p>
<p><img class="aligncenter" title="ActiveMQ voir les connexions sur les files" src="/wp-content/images/jmeter29-jms-point-to-point/activemq-03.png" alt="" width="733" height="534" /></p>
<p><strong><span style="text-decoration: underline;">Quelques commentaires :</span></strong></p>
<ul>
<li> En interne, JMeter démarre le JMS Listener (le processus d&#8217;écoute) sur la file de réception avant même le début du test (au moment de la compilation de l&#8217;arbre du script JMeter). Ce qui signifie que <em>le nom de la file ne supporte pas les variables JMeter non définies au moment du lancement du test </em>(donc une variable récupérée via un extracteur d&#8217;expression régulière ne fonctionne pas, ou bien des noms de files JMS qui sont récupérées via une Source de données CSV).</li>
<li> L&#8217;aide officielle de JMeter sur les tests JMS est ici (<a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#JMS_Point-to-Point">JMS Point-to-Point</a>) et là (<a href="http://jakarta.apache.org/jmeter/usermanual/build-jms-point-to-point-test-plan.html">Building a JMS Point-to-Point Test Plan</a>).</li>
<li> Un lien vers un tutoriel<a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0808_vandekuil/0808_vandekuil.html?ca=drs-"> IBM pour utiliser JMeter avec WebSphere MQ</a></li>
</ul>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2010/09/11/jmeter-petit-test-jms-point-a-point-avec-activemq-737.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quelques cas d&#8217;utilisation de l&#8217;extracteur d&#8217;expression régulière dans JMeter</title>
		<link>http://blog.milamberspace.net/index.php/2009/12/31/quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter-554.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/12/31/quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter-554.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 07:48:15 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[expression régulière]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=554</guid>
		<description><![CDATA[Voici un billet pour parler de l&#8217;extracteur d&#8217;expressions régulières dans JMeter. Commençons par le plan de test : très simple, une requête avec en élément fils un extracteur d&#8217;expression régulière. La requête HTTP est simplement la page d&#8217;accueil de ce blog. On place un échantillon Débogage après la requête HTTP qui possède l&#8217;extracteur d&#8217;expression régulière, [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un billet pour parler de l&#8217;extracteur d&#8217;expressions régulières dans JMeter.</p>
<p>Commençons par le plan de test : très simple, une requête avec en élément fils un extracteur d&#8217;expression régulière.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Plan de test RegExp" src="/wp-content/images/jmeter26-regexp/01-jmeter-regexp.png" alt="" width="274" height="143" /></p>
<p style="text-align: left;">La requête HTTP est simplement la page d&#8217;accueil de ce blog.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="La requête HTTP modèle" src="/wp-content/images/jmeter26-regexp/02-jmeter-regexp.png" alt="" width="568" height="248" /></p>
<p>On place un échantillon Débogage après la requête HTTP qui possède l&#8217;extracteur d&#8217;expression régulière, il permet d&#8217;afficher différentes informations internes à JMeter. Ici, on s&#8217;intéresse aux valeurs des variables de JMeter.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Léchantillon Débogage" src="/wp-content/images/jmeter26-regexp/03-jmeter-regexp.png" alt="" width="236" height="151" /></p>
<p>Ensuite (enfin) vient l&#8217;extracteur d&#8217;expression régulière, on commence par un « simple ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Lextracteur dexpression régulière JMeter" src="/wp-content/images/jmeter26-regexp/04-jmeter-regexp.png" alt="" width="486" height="238" /></p>
<p>Quelques explications :<span id="more-554"></span></p>
<ul>
<li><strong>Champs réponse à cocher :</strong> Corps. La portée de l&#8217;extracteur regexp sera le corps de la réponse (le texte html en général)</li>
<li><strong>Nom de référence :</strong> le nom de la variable dans laquelle JMeter va déposer les données récupérée par l&#8217;expression régulière</li>
<li><strong>Expression régulière :</strong> ici « (milamber) », qui signifie : « je recherche le mot milamber, et je voudrais récupérer la valeur ». Il n&#8217;y a pas à proprement parler d&#8217;expression régulière ici, car aucun caractères de correspondance de caractères n&#8217;est utilisé (par exemple « * »).</li>
<li><strong>Canevas :</strong> $1$ correspondant au premier « couple » de parenthèses dans l&#8217;expression régulière. Donc ici « milamber »</li>
<li><strong>Correspond au num. :</strong> 0. Parmi « tous les milamber » qui vont être trouvés, JMeter en choisi un au hasard et le place dans la variable JMeter NOM_VARIABLE</li>
<li><strong>Valeur par défaut :</strong> correspond à la valeur que va prendre la variable NOM_VARIABLE si jamais l&#8217;expression régulière n&#8217;est pas trouvée (autrement si il n&#8217;y a pas de milamber dans le corps de la réponse)</li>
</ul>
<p>On exécute (on lance) le test JMeter. Avec le récepteur Arbre de résultats, on peut déjà voir les données de réponse de la page d&#8217;accueil de ce site. On voit qu&#8217;il y a plusieurs occurrences de « milamber ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Les données de réponses" src="/wp-content/images/jmeter26-regexp/05-jmeter-regexp.png" alt="" width="638" height="359" /></p>
<p>Dans l&#8217;échantillon Débogage, dans l&#8217;onglet Données de réponse, on retrouve la variable <em>NOM_VARIABLE</em>.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Variables JMeter" src="/wp-content/images/jmeter26-regexp/06-jmeter-regexp.png" alt="" width="627" height="206" /></p>
<p>Quelques explications sur les différents « NOM_VARIABLExxx » que l&#8217;on trouve.</p>
<ul>
<li><strong>NOM_VARIABLE=milamber</strong>, correspond bien entendu à la valeur recherchée (et donc trouvée par JMeter) à partir de l&#8217;expression régulière</li>
<li><strong>NOM_VARIABLE_g=1</strong>, c&#8217;est le nombre de variables $x$ trouvées</li>
<li><strong>NOM_VARIABLE_g0</strong>=milamber, c&#8217;est la chaine correspondant à l&#8217;expression régulière entière</li>
<li><strong>NOM_VARIABLE_g1</strong>=milamber, correspond à ce qu&#8217;a trouvée l&#8217;expression régulière dans la partie entre parenthèses</li>
</ul>
<p><em>Ici, la variable NOM_VARIABLE_g0 est la même que NOM_VARIABLE_g1 car l&#8217;expression régulière est (milamber), et est très simple. Dans le dernier exemple de ce billet, ce n&#8217;est pas le cas, voir plus bas.</em></p>
<p>Changeons l&#8217;expression régulière en mettant simplement un M majuscule à Milamber :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Regexp" src="/wp-content/images/jmeter26-regexp/07-jmeter-regexp.png" alt="" width="456" height="106" /></p>
<p>Le résultat dans l&#8217;échantillon Débogage, c&#8217;est « Milamber » en majuscule. Donc l&#8217;extracteur d&#8217;expression régulière est sensible à la casse.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Résultat" src="/wp-content/images/jmeter26-regexp/08-jmeter-regexp.png" alt="" width="408" height="208" /></p>
<p>Changeons l&#8217;expression régulière par (Milember), donc volontairement avec une faute.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="RegExp" src="/wp-content/images/jmeter26-regexp/09-jmeter-regexp.png" alt="" width="476" height="108" /></p>
<p>Ici, comme il n&#8217;y a pas de mot <em>Milember</em> dans les données de réponse de la page HTML retournée, la valeur de NOM_VARIABLE est la valeur par défaut (ici le message d&#8217;erreur).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Résultats" src="/wp-content/images/jmeter26-regexp/10-jmeter-regexp.png" alt="" width="410" height="156" /></p>
<p>Revenons à (milamber) comme expression régulière. Comme je sais qu&#8217;il y a plusieurs « milamber » dans la page HTML, et que j&#8217;aimerais bien <strong>tous</strong> les retrouver, on change la valeur du champ Correspond au num par « <strong>-1</strong> ». Cette valeur va indiquer à JMeter d&#8217;aller chercher toutes les occurrences de l&#8217;expression régulière.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="RegExp" src="/wp-content/images/jmeter26-regexp/11-jmeter-regexp.png" alt="" width="456" height="100" /></p>
<p>Dans la vue données de réponses de l&#8217;échantillon Débogage, on a maintenant une suite de<strong> NOM_VARIABLE_x</strong> où <strong>x</strong> correspond au numéro de « milamber » trouvé. La variable NOM_VARIABLE se retrouve avec la valeur par défaut.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Resultats" src="/wp-content/images/jmeter26-regexp/12-jmeter-regexp.png" alt="" width="646" height="478" /></p>
<p>Quand on regarde à la fin des variables affichées par l&#8217;echantillon Débogage, on trouve une variable spéciale <strong>NOM_VARIABLE_matchNr</strong> = 195. Ce dernier correspond au nombre de « milamber » trouvé.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Resultats" src="/wp-content/images/jmeter26-regexp/13-jmeter-regexp.png" alt="" width="459" height="438" /></p>
<p>On a vu que l&#8217;extracteur d&#8217;expression régulière était sensible à la casse. Pour le rendre « <em>insensible</em> », il suffit de faire précéder l&#8217;expression régulière par « (?i) ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="RegExp" src="/wp-content/images/jmeter26-regexp/14-jmeter-regexp.png" alt="" width="460" height="102" /></p>
<p>Dans la liste des variables trouvées, on a maintenant à la fois des « milamber » et des « Milamber ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Resultats" src="/wp-content/images/jmeter26-regexp/15-jmeter-regexp.png" alt="" width="397" height="430" /></p>
<p>La dernière expression régulière va indiquer que l&#8217;on recherche exclusivement les « milamber » suivi de quelque chose<strong> et </strong>suivi de « .net ». C&#8217;est à dire les milamber dans « milamberspace.net ».</p>
<p>Le « quelque chose » est symbolisé par «<strong> .+</strong> »</p>
<p>Le suivi de « .net » est symbolisé par « <strong>?\.net</strong> » où la barre oblique inversée (l&#8217;anti-slash) sert à désactiver la propriété particulière du point dans une expression régulière.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="RegExp" src="/wp-content/images/jmeter26-regexp/16-jmeter-regexp.png" alt="" width="484" height="103" /></p>
<p>Dans les résultats, on a donc que les « milamber » dans la chaîne « milamberspace.net ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="RegExp" src="/wp-content/images/jmeter26-regexp/17-jmeter-regexp.png" alt="" width="302" height="351" /></p>
<p>Voici pour ce billet montrant quelques cas d&#8217;utilisation de l&#8217;extracteur d&#8217;expression régulière. Bien entendu, ce dernier n&#8217;est pas limité à ces cas, il ne tient qu&#8217;à vous de faire de belles expressions régulières pour extraire des chaînes à partir des réponses à vos requêtes.</p>
<p>Bonnes regexps !</p>
<p>Deux liens :</p>
<ul>
<li><a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Regular_Expression_Extractor">La page du manuel JMeter sur l&#8217;extracteur d&#8217;expression régulière</a></li>
<li><a href="http://jakarta.apache.org/jmeter/usermanual/regular_expressions.html">La page du manuel JMeter sur les expressions régulières</a></li>
</ul>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/12/31/quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter-554.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer en ligne de commande des paramètres à votre scénario JMeter</title>
		<link>http://blog.milamberspace.net/index.php/2009/11/15/envoyer-en-ligne-de-commande-des-parametres-a-votre-scenario-jmeter-534.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/11/15/envoyer-en-ligne-de-commande-des-parametres-a-votre-scenario-jmeter-534.html#comments</comments>
		<pubDate>Sun, 15 Nov 2009 08:10:33 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[Ligne de commande]]></category>
		<category><![CDATA[Paramètre]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=534</guid>
		<description><![CDATA[Voici un petit billet pour vous monter comment lancer JMeter en ligne de commande tout en paramétrant son scénario de test. En effet, vous pouvez avoir l&#8217;idée ou l&#8217;envie de faire une série de test en jouant sur certains paramètres de votre scénario JMeter, le tout en ligne de commande. Par exemple, faire un test [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit billet pour vous monter comment lancer JMeter en ligne de commande tout en paramétrant son scénario de test.</p>
<p>En effet, vous pouvez avoir l&#8217;idée ou l&#8217;envie de faire une série de test en jouant sur certains paramètres de votre scénario JMeter, le tout en ligne de commande. Par exemple, faire un test avec 1 utilisateur, puis le même test avec 10 utilisateurs, et le même avec 100 utilisateurs.</p>
<p>Bien évidemment vous pouvez les lancer depuis l&#8217;interface graphique de JMeter, à la suite, tout en modifiant le paramètre du nombre d&#8217;utilisateurs dans l&#8217;interface, mais c&#8217;est trop facile <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Donc pour le faire en ligne de commande, il faut d&#8217;abord passer par l&#8217;interface graphique JMeter. En effet, nous avons besoin d&#8217;utiliser une fonction JMeter qui va permettre de lire une propriété JMeter et renvoyer sa valeur. Cette fonction doit être appelée à la place de la valeur du champ correspondant au paramètre que l&#8217;on veut rendre « paramétrable »&#8230;</p>
<p>Le mieux est d&#8217;abord de voir la capture d&#8217;écran :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Utilisation de la fonction __P() de JMeter" src="/wp-content/images/jmeter23-img-cli/cli02.png" alt="" width="444" height="254" /></p>
<p>Les différents <strong>${__P(xxx,yyy)}</strong> correspondent à notre fonction JMeter qui permet de lire une propriété JMeter, et qui la renvoie.<span id="more-534"></span></p>
<p>Donc ici, on vient d&#8217;utiliser la fonction <strong>__P()</strong><em> (avec deux caractères soulignés avant le P)</em> pour définir trois paramètres :</p>
<ul>
<li>Le nombre d&#8217;unités d&#8217;exécution, qui prend soit la valeur de la variable JMeter <strong>nombreUnites</strong> ou si elle est inexistante, la valeur par défaut « 10 »</li>
<li>La durée de montée en charge, qui prend soit la valeur de la variable JMeter <strong>dureeMontee</strong> ou si elle est inexistante, la valeur par défaut « 50 »</li>
<li>La nombre d&#8217;itérations, qui prend soit la valeur de la variable JMeter <strong>nombreIterations</strong> ou si elle est inexistante, la valeur par défaut « 100 »</li>
</ul>
<p>Comme vous l&#8217;aurez compris, la fonction<strong> __P() </strong>a deux paramètres, le premier pour indiquer la clé de la propriété à rechercher, lire et renvoyer, et le second (optionnel) étant la valeur par défaut si la clé n&#8217;existe pas.</p>
<p>Une fois que vous avez défini ainsi les différents champs que vous souhaitez <em>« paramètriser »</em>, il ne reste plus qu&#8217;a lancer JMeter en ligne de commande avec la ou les valeurs.</p>
<p>Pour cela, on utilise l&#8217;option<strong> « -J »</strong> de JMeter. Celle-ci permet de définir un couple clé/valeur correspondant à une propriété JMeter. Pour notre exemple, la ligne de commande sera donc :</p>
<pre><strong>jmeter -n -l resultats.csv -t scenario.jmx -JnombreUnites=5 -JdureeMontee=10 -JnombreIterations=100</strong></pre>
<p><em>(Petit rappel : -n : mode non-gui, -l : fichier de résultats, -t : fichier scripts JMeter)</em></p>
<p>Voilà, maintenant vous pouvez jouer sur les valeurs de ces paramètres afin de faire plusieurs types de tests.</p>
<p>Plus d&#8217;infos sur les fonctions, voici <a href="http://jakarta.apache.org/jmeter/usermanual/functions.html">la page réservée aux fonctions du manuel JMeter</a></p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/11/15/envoyer-en-ligne-de-commande-des-parametres-a-votre-scenario-jmeter-534.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charger un serveur LDAP depuis une base de données avec JMeter</title>
		<link>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:58:41 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Contrôleur Pour chaque]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[LDAP]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=468</guid>
		<description><![CDATA[Voici un tutoriel pour réaliser un script JMeter qui va lire dans une base de données (ici MySQL) via JDBC, une table d&#8217;utilisateurs (nom et prénom), puis se connecter sur un serveur LDAP (ici openLDAP) afin d&#8217;ajouter chaque utilisateur dans le LDAP. Ce tutoriel a pour objectifs : Rappeler l&#8217;utilisation de Requête JDBC pour accéder [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un tutoriel pour réaliser un script JMeter qui va lire dans une base de données (ici MySQL) via JDBC, une table d&#8217;utilisateurs (nom et prénom), puis se connecter sur un serveur LDAP (ici openLDAP) afin d&#8217;ajouter chaque utilisateur dans le LDAP.</p>
<p><span style="text-decoration: underline;">Ce tutoriel a pour objectifs :</span></p>
<ol>
<li> Rappeler l&#8217;utilisation de <strong>Requête JDBC</strong> pour accéder à une base de données, et récupérer dans un ensemble de variables les résultats de requête JDBC</li>
<li> Montrer comment effectuer l&#8217;ajout d&#8217;une fiche Utilisateur dans un serveur LDAP via une <strong>Requête LDAP étendue</strong> de JMeter</li>
<li> Montrer le fonctionnement du <strong>Contrôleur Pour chaque </strong>dans JMeter</li>
<li> Montrer un petit exemple de <strong>Pré-Processeur BeanShell</strong></li>
</ol>
<p>Voici le plan de de test final.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Plan de test LDAP / Base avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap01.png" alt="" width="347" height="377" /></p>
<p><span id="more-468"></span><span style="text-decoration: underline;">On observe deux sections :</span></p>
<ol>
<li><strong>Base de données : </strong>qui est un <strong>Contrôleur Simple</strong> regroupant les éléments nécessaires à la partie JDBC afin d&#8217;accéder à la base et faire la requête SQL qui va permettre de récupérer les utilisateurs à créer.</li>
<li><strong>LDAP : </strong>qui est aussi un<strong> Contrôleur Simple</strong> regroupant les éléments permettant la connexion au serveur LDAP et effectuer la requête d&#8217;ajout dans le LDAP des utilisateurs.</li>
</ol>
<p>Concernant la partie Base de données, je vous revois vers <a href="http://blog.milamberspace.net/index.php/2009/06/12/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-1-311.html">ce billet</a> pour avoir plus de détails sur sa mise en place. Ci-dessous, je vais seulement commenter certains éléments de cette partie.</p>
<p>L&#8217;élément <strong>Requête JDBC</strong> correspond à la requête SQL que JMeter va effectuer pour obtenir une liste de noms et de prénoms qui seront utilisés dans la section LDAP.</p>
<ul>
<li> Le champ <em>Nom de liaison</em> fait référence au &#8216;pool&#8217; JDBC configuré dans l&#8217;élément <strong>Configuration de connexion JDBC</strong></li>
<li> Le type de requête est <em>Select Statement, </em>on fait donc une requête SQL commençant par SELECT :
<ul>
<li> <em>SELECT ID, NOM, PRENOM from BOXERS</em></li>
</ul>
</li>
<li> Dans le champ N<em>oms des variables</em>, on donne les variables (JMeter) qui vont recevoir les données. Pour nous, cela sera <em>VAR_ID, VAR_NOM, VAR_PRENOM</em>.</li>
</ul>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête JDBC" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap03.png" alt="" width="473" height="342" /></p>
<p style="text-align: left;">A l&#8217;exécution, la requête SQL retournera une liste de noms et les placera dans les variables correspondantes, avec un suffixe <strong>_X</strong> où <em>X</em> est le numéro de la ligne retournée.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête JDBC" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap02.png" alt="" width="627" height="457" /></p>
<p>Pour la section suivante, LDAP, on utilisera donc ces variables pour faire l&#8217;ajout dans le LDAP.</p>
<p>Ainsi voici la partie LDAP : le premier élément est une <strong>Requête LDAP étendue</strong> qui va permettre de faire la connexion avec le serveur LDAP.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Conexion LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap10.png" alt="" width="640" height="357" /></p>
<p>Pour cela, on choisi le type de test « <em>Unité liée </em>», et on complète les différents champs nécessaires :</p>
<ul>
<li> <strong>Nom du serveur</strong> (ou adresse IP)</li>
<li> <strong>Port</strong> <strong>:</strong> 389 (correspondant au port par défaut pour le protocole ldap)</li>
<li> <strong>DN :</strong> nom du suffixe de l&#8217;annuaire</li>
<li> <strong>Identifiant</strong> <strong>:</strong> un compte disposant des droits pour modifier l&#8217;annuaire (ici c&#8217;est l&#8217;administrateur LDAP)</li>
<li> <strong>Mot de passe</strong> associé au compte ci-dessus</li>
<li> <strong>Délai d&#8217;attente de connexion :</strong> paramètre optionnel qui permet de faire échouer l&#8217;échantillon (de connexion) si jamais la connexion n&#8217;est pas ouverte</li>
<li> La case à cocher permet de faire une connexion via le protocole LDAPS (via SSL donc) <em>(accompagné par le port 636 en général)</em></li>
</ul>
<p>Ensuite, on en profite pour faire l&#8217;opération inverse de la connexion : la Déconnexion. Pour cela, on choisit tout simplement le type de test « <em>Délier les unités</em> ». Cette requête sera placée en fin du scénario.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Déconnexion LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap11.png" alt="" width="641" height="180" /></p>
<p>Passons aux éléments qui vont nous permettre d&#8217;ajouter les fiches annuaires dans le LDAP.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Contrôleur Pour chaque (foreach) JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap12.png" alt="" width="342" height="162" /></p>
<p>Le contrôleur ci-dessus, <strong>Pour chaque </strong>va tout simplement <em>(efficacement je dirais)</em>, parcourir une à une les variables <em>VAR_NOM_x </em>où <em>x</em> est le numéro de ligne des résultats de la requête SQL précédente. À chaque itération, il va affecter à la variable <em>NOM</em> la valeur de <em>VAR_NOM_x</em>. <em>(on notera la correspondance entre VAR_NOM de la requête JDBC Select et le VAR_NOM_x du contrôleur)</em></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Compteur JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap13.png" alt="" width="274" height="227" /></p>
<p>Ici, on ajoute un <strong>Compteur </strong>JMeter qui nous permet de connaître (suivre) le numéro de ligne, afin que nous puissions l&#8217;utiliser dans la prochaine requête pour générer des variables.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Ajout LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap14.png" alt="" width="639" height="432" /></p>
<p>Nous voilà dans la requête « costaude », il s&#8217;agit d&#8217;une <strong>Requête LDAP étendue</strong> qui va traiter l&#8217;ajout. Ainsi, on choisit le type de test « <em>Add test </em>».</p>
<p>Puis le champ <em>Entry DN</em> nous permet d&#8217;indiquer l&#8217;identifiant unique de la fiche dans l&#8217;annuaire.</p>
<p>Le tableau suivant, permet d&#8217;ajouter les couples « clé: valeur » suivant le principe du fichier LDIF (importation de comptes LDAP).</p>
<p>On notera les points suivants :</p>
<ul>
<li><em>${__V(VAR_PRENOM_${CPT})}</em> permet de générer la variable « <em>${VAR_PRENOM_x} </em>pour chaque itération du <strong>Contrôleur Pour chaque</strong></li>
<li><em>${NEW_NOM}</em> et <em>${NEW_PRENOM}</em> sont des variables définies dans un <strong>Pré-processeur BeanShell</strong> (ci-dessous)</li>
</ul>
<p>Dans la requête d&#8217;ajout, il est important de ne pas oublier les éléments « <em>objectclass</em> » qui vont définir la structure de la fiche annuaire.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Pré-processeur BeanShell JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap16.png" alt="" width="510" height="519" /></p>
<p>En fils de la requête d&#8217;ajout, on place donc un <strong>Pré-processeur BeanShell</strong>, qui va permettre d&#8217;effectuer quelques actions (ou préparations) sur les données avant leur utilisation.</p>
<p>Tout d&#8217;abord, on récupère la variable <em>CPT</em> (via <em>vars.get(&nbsp;&raquo;GET&nbsp;&raquo;)</em>), puis avec une concaténation, on récupére la valeur de la variable <em>VAR_PRENOM_x</em>. On supprime les points et enlève les guillemets <em>(car certains noms dans la base des boxers ont des pseudonymes entre guillemets)</em>. Puis on refait la même chose avec le NOM.</p>
<p>Pour finir, on génère l&#8217;adresse email via un petit passage en minuscule et une concaténation du domaine de messagerie.</p>
<p>A chaque fois, on utilise le <em>vars.put</em> pour déposer des nouvelles variables dans JMeter.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Assertion Réponse JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap15.png" alt="" width="433" height="321" /></p>
<p>Ensuite, avec l&#8217;élément suivant, une <strong>Assertion Réponse</strong>, j&#8217;anticipe sur l&#8217;exécution et la vérification que tout s&#8217;est bien passé. En effet, si l&#8217;exécution de la requête d&#8217;ajout LDAP fonctionne correctement, le résultat contient «<em> &lt;responsemessage&gt;Success&lt;/responsemessage&gt; </em>». L&#8217;assertion sur ce texte va nous permettre de détecter rapidement les cas en erreur <em>(si il y en a)</em>.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de recherche avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap17.png" alt="" width="645" height="432" /></p>
<p>Après la requête d&#8217;ajout, on place une requête de recherche dans le LDAP (type de test : <em>Search test</em>). C&#8217;est optionnel, c&#8217;est juste pour faire une seconde vérification du bon ajout.</p>
<p>On notera :</p>
<ul>
<li>Le champ <strong>Search Filter </strong>qui est ici le « <em>uid</em> » inséré</li>
<li>Le champ <strong>Scope</strong> est positionné à <em>Effectuer une recherche &#8216;onelevel&#8217;</em> (on ne recherche pas dans les sous-éléments de l&#8217;arbre LDAP)</li>
<li>Le champ <strong>Size limit</strong> pour limiter à 1 le résultat retourné (on fait une recherche unitaire)</li>
<li>Le champ <strong>Limite de temps</strong> à 10000 (ms) pour faire échouer l&#8217;échantillon si le serveur LDAP est trop long à répondre</li>
<li>Le champ <strong>Attributes</strong> (optionnel) qui permet de choisir les champs à récupérer, ici le CN, SN et Mail</li>
<li>Et pour finir, la case à cocher <strong>Examiner les résultats de recherche ?</strong> va permettre d&#8217;avoir dans les résultats du test, les valeurs des champs récupérés afin notamment de faire (par exemple) une assertion.</li>
</ul>
<p>Ensuite <em>(enfin)</em> on peut passer à l&#8217;exécution du scénario JMeter.</p>
<p>Pour cela, on grade la configuration par défaut du <strong>Groupes d&#8217;unités</strong>, à savoir : 1 unité qui monte en charge en 1 seconde et qui faire 1 itération (1-1-1).</p>
<p><em>(c&#8217;est le <strong>Contrôleur Pour chaque</strong> qui se charge des itérations sur les utilisateurs)</em></p>
<p><span style="text-decoration: underline;">Voici l&#8217;arbre de résultats :</span></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Résultats de lexécution LDAP dans JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap18.png" alt="" width="679" height="298" /></p>
<p>Si tout s&#8217;est bien passé, tout est <em>vert</em>. Dans les données de réponses, on voit les résultats des requêtes LDAP, avec la valeur <em>Success</em>.</p>
<p>On peut également vérifier dans les données de réponses que <em>par exemple</em> la génération des adresses email s&#8217;est bien déroulée.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Vérification du pré-processeur dans la requête LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap19.png" alt="" width="667" height="444" /></p>
<p>Un récepteur <strong>Résultats d&#8217;assertion</strong>, configuré pour afficher <em>uniquement</em> les erreurs, permet de voir les utilisateurs qui ont eu un problème lors de l&#8217;exécution. Ici, il y a eu des soucis visiblement sur les noms de boxers qui ont un caractère accentué&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Rapport dassertion JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap20.png" alt="" width="749" height="271" /></p>
<p>Et voilà, avec ce tutoriel, on découvre que JMeter sait faire d&#8217;autre chose qu&#8217;un test de charge Web.</p>
<p>Vous noterez que ce type de scénario, fait de JMeter une sorte d&#8217;<a href="http://fr.wikipedia.org/wiki/ETL">ETL (Extract-Transform-Load)</a>. Ainsi, on peut même imaginer d&#8217;adapter ce scénario pour maintenir une synchronisation entre une base de données et un LDAP, le tout en exécutant JMeter en <a href="http://blog.milamberspace.net/index.php/2009/02/01/jmeter-pourquoi-executer-son-test-de-charges-en-mode-non-gui-sans-interface-graphique-192.html">mode non-gui</a> dans une tâche programmée ou un cron.</p>
<p>Je prépare une suite à ce tutoriel concernant la conversion automatisée des mots de passe stockés ici en clair dans le LDAP, vers des mots de passe stockés en SHA-1.</p>
<p><em>Bons scénarios.</em></p>
<p><em><br />
</em></p>
<p><strong>En annexes :</strong><br />
<strong> A/ </strong>Un petit SELECT de ma base de données (histoire de montrer sa structure)</p>
<pre>mysql&gt; select * from BOXERS limit 10;
 +----+----------+------------+
 | ID | PRENOM   | NOM        |
 +----+----------+------------+
 |  1 | Muhammad | Ali        |
 |  2 | Lou      | Ambers     |
 |  3 | Vito     | Antuofermo |
 |  4 | Jorge    | Arce       |
 |  5 | Alexis   | Arguello   |
 |  6 | Henry    | Armstrong  |
 |  7 | Abe      | Attell     |
 |  8 | Monte    | Attell     |
 |  9 | Yuri     | Arbachakov |
 | 10 | Satoshi  | Aragaki    |
 +----+----------+------------+
 10 rows in set (0.03 sec)</pre>
<p><strong>B/ </strong>Le format LDIF d&#8217;exemple <em>(qui permet de connaître les champs à ajouter dans la requête LDAP d&#8217;ajout, mais entendu, il faut l&#8217;adapter pour que cela colle avec le vôtre (serveur LDAP))</em></p>
<pre>dn: uid=milamber,ou=Users,dc=milamberspace,dc=net
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: inetOrgPerson
uid: milamber
userPassword: jmeter2009
cn: milamber
mail: milamber@milamberspace.net
displayname: Milamber
givenname: Milamber
sn: Milamber</pre>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

