<?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 &#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>JMeter (surtout) mais aussi l&#039;Informatique, Internet, etc.</description>
	<lastBuildDate>Wed, 14 Jul 2010 06:34:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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-dutilisation-de-lextracteur-dexpression-reguliere-dans-jmeter-554.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/12/31/quelques-cas-dutilisation-de-lextracteur-dexpression-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, il permet d&#8217;afficher [...]]]></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-dutilisation-de-lextracteur-dexpression-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 avec [...]]]></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>
		<item>
		<title>JMeter : Exemple de script BeanShell pour enregistrer des données dans un fichier</title>
		<link>http://blog.milamberspace.net/index.php/2009/03/13/jmeter-exemple-de-script-beanshell-pour-enregistrer-des-donnees-dans-un-fichier-241.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/03/13/jmeter-exemple-de-script-beanshell-pour-enregistrer-des-donnees-dans-un-fichier-241.html#comments</comments>
		<pubDate>Fri, 13 Mar 2009 23:07:51 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[BeanShell]]></category>
		<category><![CDATA[fonctionnel]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=241</guid>
		<description><![CDATA[Un petit billet dans un but pédagogique, pour montrer un exemple de script BeanShell pour enregistrer des données dans un fichier texte.
Soit le plan de test suivant :

Dans ce plan de test, on extrait avec l&#8217;extracteur d&#8217;expressions régulières des données de la page reçue, (ici un NOMBRE).

On ajoute &#8216;au passage&#8217; une assertion de réponse qui [...]]]></description>
			<content:encoded><![CDATA[<p style="">Un petit billet dans un but pédagogique, pour montrer un exemple de script BeanShell pour enregistrer des données dans un fichier texte.</p>
<p style="">Soit le plan de test suivant :</p>
<p style=" text-align: center;"><img class="aligncenter" title="Plan de test Beanshell exemple" src="/wp-content/images/jmeter14-img/01-jmeter-beanshell-plan-de-test.png" alt="" width="278" height="154" /></p>
<p style="">Dans ce plan de test, on extrait avec l&#8217;extracteur d&#8217;expressions régulières des données de la page reçue, (ici un NOMBRE).</p>
<p style=" text-align: center;"><img class="aligncenter" title="Jmeter RegExp" src="/wp-content/images/jmeter14-img/02-jmeter-regexp.png" alt="" width="464" height="228" /></p>
<p style="">On ajoute &#8216;au passage&#8217; une assertion de réponse qui est là pour s&#8217;assurer que l&#8217;expression regexp a réussie (on vérifier si on (re)trouve le NOMBRE précédemment cherché dans la page).</p>
<p style=" text-align: center;"><img class="aligncenter" title="Assertion" src="/wp-content/images/jmeter14-img/03-jmeter-beanshell-assertion.png" alt="" width="382" height="314" /></p>
<p style="">Et pour finir, on a un élément post-processeur BeanShell qui exécuter un bout de code Java pour faire l&#8217;enregistrement de la variable NOMBRE dans un fichier.</p>
<p style=" text-align: center;"><img class="aligncenter" title="Exemple de scripts BeanShell pour JMeter" src="/wp-content/images/jmeter14-img/04-jmeter-beanshell-script.png" alt="" width="524" height="370" /></p>
<p style="">
<p style=""><span id="more-241"></span>Le code du BeanShell (du Java donc) est le suivant :</p>
<pre style="">if (prev.isSuccessful()) {
    String nombre = vars.get("NOMBRE");
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/nombre.csv",true));
        out.write(nombre +"\n");
        out.close();
    } catch (IOException e) {}
}</pre>
<p>Quelques commentaires :</p>
<ul>
<li>Le test sur le <em>prev.isSuccessful() </em>afin d&#8217;enregistrer seulement les échantillons réussis,</li>
<li>Le <em>vars.get(&laquo;&nbsp;NOMBRE&nbsp;&raquo;);</em> pour récupérer dans une variable Java le contenu de la varialbe JMeter NOMBRE,</li>
<li>Le reste pour écrire dans un fichier.</li>
</ul>
<p style="">Et voilà.</p>
<p style=""><span style="text-decoration: underline;"><em>Pré-requis :</em></span> pour exécuter des scripts <a href="http://beanshell.org/">BeanShell</a> avec JMeter, il faut récupérer le <a href="http://beanshell.org/bsh-2.0b4.jar">fichier JAR du BeanShell</a>, et le déposer dans le répertoire jmeter_home/lib (ou dans le classpath)</p>
<p style=""><em><span style="text-decoration: underline;">Nota</span></em> : JMeter propose d&#8217;une part la possibilité d&#8217;enregistrer directement dans le fichier CSV ou JTL de résultats (via la fonctionnalités des « <a href="http://jakarta.apache.org/jmeter/usermanual/listeners.html#sample_variables">samples_variables</a> »), et d&#8217;autre part d&#8217;enregistrer l&#8217;ensemble des données de réponses (via le récepteur « <a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Save_Responses_to_a_file">Sauvegarder les réponses vers un fichier</a> »), cependant, il est parfois intéressant de pouvoir récupérer quelques variables durant un test JMeter, faire des opérations dessus et/ou créer un fichier de données pré-formaté à la volée.</p>
<p style="">./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/03/13/jmeter-exemple-de-script-beanshell-pour-enregistrer-des-donnees-dans-un-fichier-241.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
