<?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; JDBC</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/jdbc/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>Apache JMeter (surtout) mais aussi GNU/Linux, OpenSource, l&#039;Informatique, etc.</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:56:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>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 : utilisation de l&#8217;élément JDBC comme source de données pour un test de charge (partie 2)</title>
		<link>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html#comments</comments>
		<pubDate>Sat, 13 Jun 2009 08:30:54 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=317</guid>
		<description><![CDATA[Nous revoilà dans la deuxième partie de ce tutoriel. Pour rappel, nous étions dans la mise en œuvre d&#8217;un test de charges, dont les données injectées proviennent directement d&#8217;une base de données et ont été récupérées par JMeter, le tout expliqué dans cette partie. Le schéma ci-dessous montre les deux parties. Dans les lignes suivantes, [...]]]></description>
			<content:encoded><![CDATA[<p >Nous revoilà dans la deuxième partie de ce tutoriel. Pour rappel, nous étions dans la mise en œuvre d&#8217;un test de charges, dont les données injectées proviennent directement d&#8217;une base de données et ont été récupérées par JMeter, le tout expliqué dans <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">cette partie</a>.<span id="more-317"></span></p>
<p >Le schéma ci-dessous montre les deux parties. Dans les lignes suivantes, on s&#8217;occupera donc de la deuxième partie.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Plan de test JMeter JDBC" src="/wp-content/images/jmeter19-img/part1/01-jmeter-jdbc.png" alt="" width="291" height="273" /></p>
<p >Tout d&#8217;abord, la deuxième partie débute par un <strong>Contrôleur Simple</strong>, puis on attache directement un élément de configuration <strong>Paramètres HTTP par défaut</strong> dans lequel on configure l&#8217;adresse du serveur à tester. Pour moi, cela sera un simple serveur Tomcat avec ses applications d&#8217;exemples. <a href="http://blog.milamberspace.net/index.php/jmeter-variabilisation-de-donnees">Ce tutoriel </a>détaille le scénario fonctionnel.</p>
<p >Ensuite vient un élément de configuration <strong>Compteur</strong><span style="font-weight: normal;">, que l&#8217;on initialise (Lancer) à 1 avec un incrément de 1. Son nom de référence sera CPT.</span></p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Compteur JMeter" src="/wp-content/images/jmeter19-img/part2/02-CS-jmeter-jdbc.png" alt="" width="312" height="224" /></p>
<p >La <strong>requête HTTP</strong> arrive ensuite. Il y a bien entendu l&#8217;URL à appeler, mais également les paramètres à envoyer dans ce formulaire pour avoir le Prénom et Nom en résultat.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Requête HTTM JMeter" src="/wp-content/images/jmeter19-img/part2/03-CS-jmeter-jdbc.png" alt="" width="765" height="342" /></p>
<p >C&#8217;est ici, que nous allons utiliser les variables récupérées <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">du billet précédent</a>. Pour cela nous allons utiliser une fonction JMeter bien pratique puisqu&#8217;elle va évaluer une chaîne de caractères générée en tant que nom de variable. La fonction est <a href="http://jakarta.apache.org/jmeter/usermanual/functions.html#__V">__V()</a> (deux soulignés et V)</p>
<p >Nous avons ainsi :</p>
<p ><strong>${__V(VAR_PRENOM_${CPT})}</strong></p>
<p >qui va faire pour un CPT à 1, le nom de variable VAR_PRENOM_1 (et compris comme ${VAR_PRENOM_1})</p>
<p >Et comme le compteur va s&#8217;incrémenter de 1 à chaque itération, nous allons avoir ${VAR_PRENOM_1}, ${VAR_PRENOM_2}, ${VAR_PRENOM_3}, etc.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Assertion Réponse JMeter" src="/wp-content/images/jmeter19-img/part2/04-CS-jmeter-jdbc.png" alt="" width="364" height="328" /></p>
<p >En élément fils que la requête HTTP, on peut placer de manière optionnelle, une <strong>Assertion Réponse</strong> qui vient vérifier que l&#8217;envoi du formulaire a bien fonctionné (car l&#8217;application affiche le nom et prénom qui ont été envoyés).</p>
<p >Il ne reste plus qu&#8217;a faire une exécution (en gardant le paramétrage en 1-1-10 du groupe d&#8217;unités)</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Groupes dunités 1-1-10" src="/wp-content/images/jmeter19-img/part2/08-CS-jmeter-jdbc.png" alt="" width="407" height="280" /></p>
<p style="margin-bottom: 0cm; text-align: left;">Voici les résultats dans l&#8217;élément <strong>Arbre de résultats</strong> :</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Execution" src="/wp-content/images/jmeter19-img/part2/06-CS-jmeter-jdbc.png" alt="" width="575" height="261" /></p>
<p >Génial, cela marche ! <em>(vous en doutiez ? <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )</em></p>
<p >Ah mais que ce passe-t-il à partir de la septième itération ?</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Septieme exécution" src="/wp-content/images/jmeter19-img/part2/07-CS-jmeter-jdbc.png" alt="" width="570" height="281" /></p>
<p >L&#8217;explication est simple, ma requête SQL ne renvoie que 6 éléments, donc JMeter ne trouvant plus d&#8217;éléments, envoi le nom de la variable&#8230; Allez, c&#8217;est facile à régler, il suffit de mettre dans le champ Maximum du <strong>Compteur CPT</strong>, la variable suivante : <strong>${VAR_ID_#}</strong> qui, je vous le rappelle, correspond au nombre d&#8217;éléments retournés pour le champ VAR_ID. Donc ici pour nous c&#8217;est 6.</p>
<p >Ainsi lors de l&#8217;exécution, le compteur va re-boucler de 1 à 6 (min à max) indéfiniment.</p>
<p ><em>Et voilà</em>, vous avez donc maintenant un script JMeter qui attaque une table dans une base de données pour ensuite faire un test de charges avec ces données.</p>
<p ><span style="text-decoration: underline;">Une petite remarque pour la fin :</span></p>
<p >Si jamais vous voulez utiliser un plan de test similaire à celui du tutoriel pour un test de charge avec 1 million de lignes remontées par la requête SQL, il y a de forte chance pour qu&#8217;il y ait des problèmes de mémoire dans votre JMeter, car cela va faire 1 million de variables en mémoire (ouille!)</p>
<p >./</p>
<p >
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter : utilisation de l&#8217;élément JDBC comme source de données pour un test de charge (partie 1)</title>
		<link>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</link>
		<comments>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#comments</comments>
		<pubDate>Fri, 12 Jun 2009 22:44:11 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=311</guid>
		<description><![CDATA[Avec la version 2.3.3, JMeter nous propose une amélioration de l&#8217;échantillon JDBC, qui permet de récupérer les valeurs de champs d&#8217;une requête SQL de type SELECT et de les placer dans des variables JMeter. D&#8217;où l&#8217;idée suivante : Pourquoi ne pas utiliser une base de données comme source de données pour un test de charge [...]]]></description>
			<content:encoded><![CDATA[<p>Avec la version 2.3.3, JMeter nous propose une amélioration de l&#8217;échantillon JDBC, qui permet de récupérer les valeurs de champs d&#8217;une requête SQL de type SELECT et de les placer dans des variables JMeter.</p>
<p><em>D&#8217;où l&#8217;idée suivante :</em> Pourquoi ne pas utiliser une base de données comme source de données pour un test de charge ?</p>
<p>Tout d&#8217;abord les pré-requis :</p>
<ul>
<li> Une base de données bien entendu, avec le pilote JDBC approprié, à placer dans Jmeter_Home/lib</li>
<li>Dans la base de données, une table avec une liste d&#8217;éléments (ici j&#8217;ai repris <a href="http://blog.milamberspace.net/index.php/jmeter-variabilisation-de-donnees">mon fichier BOXERS</a> que j&#8217;ai inséré en base)</li>
</ul>
<p>Bon voyons un peu comment faire. Ci-dessous le plan de test à mettre en œuvre :</p>
<p style="text-align: center;"><img class="alignnone" title="Plan de test Jmeter" src="/wp-content/images/jmeter19-img/part1/01-jmeter-jdbc.png" alt="" width="291" height="273" /></p>
<p>Il y a deux parties :</p>
<ul>
<li>Partie 1 : qui est chargée de récupérer les données de la base de données (objet de ce billet)</li>
<li>Partie 2 : qui est le test de charge à proprement parlé, et qui est donc chargé de consommer les données (objet du billet suivant)<span id="more-311"></span></li>
</ul>
<p>Dans la partie 1, tout d&#8217;abord, on place un <strong>Contrôleur Exécution unique</strong>, il va permettre d&#8217;exécuter une unique fois la requête SQL de sélection de la liste de données qui va servir au test. Les itérations suivantes ne ré-exécuteront pas la requête.</p>
<p>Juste dessous, en tant que fils, on trouve l&#8217;élément<strong> Configuration de connexion JDBC</strong>, c&#8217;est avec lui que nous allons pouvoir définir le pool de connexions vers la base de données.</p>
<p>Ci-dessous, sa configuration :</p>
<p style="text-align: center;"><img class="alignnone" title="Configuration JDBC JMeter" src="/wp-content/images/jmeter19-img/part1/02-jmeter-jdbc.png" alt="" width="558" height="428" /></p>
<p>Ici, on définit un pool avec un nom de liaison <strong>jdbc/pool</strong> qui sera utilisé plus tard. C&#8217;est une base de données MySQL, comme vous le constatez dans la partie configuration de connexion à la base de données.</p>
<p><em>Je ne détaille pas, je suppose que vous avez déjà configuré un pool sur un serveur de type Tomcat ou autre (voir google sinon)</em></p>
<p>On notera que la requête de validation permet de vérifier la connexion avant que le pool ne donne la connexion à la requête (<strong>échantillon JDBC</strong>). Ici dans ma base « milambertestdb » il y a une table vide « POOL_HEARTBEAT ».</p>
<p>Une fois que le pool est défini, on peut passer à la <strong>requête JDBC</strong>. Ci-dessous sa configuration :</p>
<p style="text-align: center;"><img class="alignnone" title="Requête JDBC JMeter" src="/wp-content/images/jmeter19-img/part1/03-jmeter-jdbc.png" alt="" width="531" height="314" /></p>
<ul>
<li><span style="text-decoration: underline;">Le nom de liaison :</span> jdbc/pool en référence bien sur à l&#8217;élément de configuration JDBC</li>
<li><span style="text-decoration: underline;">Le type de requête </span>est placé à « Select Statement » afin de permettre d&#8217;effectuer une requête SQL de type SELECT</li>
<li><span style="text-decoration: underline;">La requête (SQL)</span> suivante est indiquée :
<ul>
<li>select ID, NOM, PRENOM from BOXERS where UTILISABLE = 1 AND PRENOM LIKE &#8216;Ar%&#8217;</li>
<li>On sélectionne dans la table BOXERS, trois champs (ID, NOM, PRENOM) à condition que le champ UTILISABLE soit égale à 1 et que le prénom commence par « Ar ».</li>
</ul>
</li>
<li>Les champs <span style="text-decoration: underline;">Valeurs des paramètres</span> et <span style="text-decoration: underline;">Types des paramètres </span>ne sont pas utilisés car nous n&#8217;avons pas d&#8217;éléments variables à insérer dans la requête SQL pour son exécution.</li>
<li>Le dernier <span style="text-decoration: underline;">champ Noms des variables</span> est, par contre, utilisé pour définir les préfixes de variables JMeter qui seront utilisées pour stocker les valeurs résultants de la requête SQL.</li>
</ul>
<p>Ensuite, juste après la requête JDBC, on place un <strong>échantillon Débogage</strong> à des fins de&#8230; débogage <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> , ainsi on pourra voir si tout se passe bien du coté des Variables JMeter durant le tir.</p>
<p style="text-align: center;"><img class="alignnone" title="Echantillon Débogage JMeter" src="/wp-content/images/jmeter19-img/part1/04-jmeter-jdbc.png" alt="" width="387" height="156" /></p>
<p>Ensuite on place en fils du contrôleur <strong>Exécution unique</strong>, un récepteur <strong>Arbre de résultats,</strong> et on lance un itération de test (le <strong>Groupe d&#8217;unités</strong> est configuré à 1-1-10).</p>
<p>Voici le résultat d&#8217;exécution :</p>
<p style="text-align: center;"><img class="alignnone" title="Résultat dexécution avec Résultat dAssertion JMeter" src="/wp-content/images/jmeter19-img/part1/05-jmeter-jdbc.png" alt="" width="572" height="268" /></p>
<p>Dans la requête SQL, au niveau de l&#8217;onglet Données de réponse, on trouve un tableau contenant la liste (ici de six éléments) de réponse.</p>
<p>Au niveau de<strong> l&#8217;échantillon Débogag</strong>e, on trouve trois ensemble de variables correspondant aux données de la liste.</p>
<p style="text-align: center;"><img class="alignnone" title="Résultat Echantillon Débogage JMeter" src="/wp-content/images/jmeter19-img/part1/06-jmeter-jdbc.png" alt="" width="585" height="434" /></p>
<p>Chaque ensemble est définit par :</p>
<ul>
<li>une variable « <strong>Nom_De_Champ + _#</strong> » pour donner le nombre d&#8217;éléments retournés</li>
<li>N variables « <strong>Nom_De_Champ + N</strong> » pour chaque valeur retournée</li>
</ul>
<p>Dans <a href="http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html">la partie suivante</a>, nous allons voir comment utiliser ces données pour faire son test.</p>
<p><em>Mine de rien, vous venez de faire un script qui attaque une base de données, et cela peut vous servir dans d&#8217;autres cas, notamment tester les performances d&#8217;une base de données.</em></p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>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/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

