<?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; regexp</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/regexp/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>Apache JMeter (surtout) mais aussi GNU/Linux, OpenSource, l&#039;Informatique, etc.</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:56:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JMeter : 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>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>JMeter : Trouver le bon élément dans une liste avec les expressions régulières et en mode ligne unique</title>
		<link>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</link>
		<comments>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#comments</comments>
		<pubDate>Sun, 08 Mar 2009 08:53:53 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[fonctionnel]]></category>
		<category><![CDATA[ORO]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=227</guid>
		<description><![CDATA[Voici un billet pour parler des expressions régulières (regexp) avec JMeter. L&#8217;élément Extracteur d&#8217;expressions régulières est très utile dans les scénario JMeter pour extraire des données de la réponse reçues suite à une requête. Par contre, il n&#8217;est pas toujours facile d&#8217;avoir (de trouver) la bonne regexp&#8230; J&#8217;ai mis quelques heures pour trouver cette regexp [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un billet pour parler des expressions régulières (regexp) avec JMeter. L&#8217;élément Extracteur d&#8217;expressions régulières est très utile dans les scénario JMeter pour extraire des données de la réponse reçues suite à une requête. Par contre, il n&#8217;est pas toujours facile d&#8217;avoir (de trouver) la bonne regexp&#8230;</p>
<p>J&#8217;ai mis quelques heures pour trouver cette regexp qui était nécessaire pour la préparation d&#8217;un scénario de test de charges JMeter. J&#8217;ai même adapté un petit programme Java/Swing testeur de regexp style Java pour qu&#8217;il devienne un programme testeur de regexp Jakarta ORO, celui du JMeter, ceci afin de tester plus vite les différentes regexp.</p>
<p>Commençons, soit le texte de réponse d&#8217;une requête HTTP (utilisant en fait SOAP/XML-RPC) suivant :</p>
<pre>&amp;lt;ClientBean&gt;
&amp;lt;id&gt;765432&amp;lt;/id&gt;
&amp;lt;code&gt;1.87665308&amp;lt;/code&gt;
&amp;lt;nom&gt;JAMES BOND&amp;lt;/nom&gt;
&amp;lt;statutNumAppel&gt;Inactif&amp;lt;/statutNumAppel&gt;
&amp;lt;/ClientBean&gt;
&amp;lt;ClientBean&gt;
&amp;lt;id&gt;765432&amp;lt;/id&gt;
&amp;lt;code&gt;1.33333333&amp;lt;/code&gt;
&amp;lt;nom&gt;LARGO WINCH&amp;lt;/nom&gt;
&amp;lt;statutNumAppel&gt;Inactif&amp;lt;/statutNumAppel&gt;
&amp;lt;/ClientBean&gt;
&amp;lt;ClientBean&gt;
&amp;lt;id&gt;765432&amp;lt;/id&gt;
&amp;lt;code&gt;1.87999999&amp;lt;/code&gt;
&amp;lt;nom&gt;BENGAMIN GATES&amp;lt;/nom&gt;
&amp;lt;statutNumAppel&gt;Actif&amp;lt;/statutNumAppel&gt;
&amp;lt;/ClientBean&gt;
&amp;lt;ClientBean&gt;
&amp;lt;id&gt;765432&amp;lt;/id&gt;
&amp;lt;code&gt;1.23334444&amp;lt;/code&gt;
&amp;lt;nom&gt;EMMA PEAL&amp;lt;/nom&gt;
&amp;lt;statutNumAppel&gt;Inactif&amp;lt;/statutNumAppel&gt;
&amp;lt;/ClientBean&gt;</pre>
<p><em>Cette liste est dynamique (on n&#8217;a pas toujours 4 éléments, celui ayant le statut d&#8217;actif n&#8217;est pas toujours à cette position (ici 3ème) et les valeurs bien entendues changent pour chaque requête du test).</em></p>
<p>Comment faire pour extraire le code « 1.87999999 » correspondant au même ID 765432 pour chaque élément de cette liste, et qui est celui « Actif » ? Le tout avec une expression régulière JMeter ?<span id="more-227"></span></p>
<p>Avant de commencer, je rappelle que l&#8217;analyseur d&#8217;expressions régulières de JMeter est <a href="http://jakarta.apache.org/oro/" target="_blank">Jakarto ORO</a>. Celui-ci fourni un moteur qui reproduit le comportement du moteur d&#8217;expressions régulières de Perl v5.003. On peut donc se référer à la <a title="Documentation Perl" href="http://perldoc.perl.org/perl.html" target="_blank">documentation de Perl</a> pour comprendre les expressions régulières.</p>
<p><strong><span style="color: #003366;"><em>NB. Depuis la version 2.4 de JMeter, le récepteur Arbre de résultats propose une vue Testeur de RegExp qui permet de tester une expression régulière directement sur la réponse de la requête reçue.</em></span></strong></p>
<p>Pour revenir à notre question. Tout d&#8217;abord, il faut passer en <strong>mode ligne unique</strong> au niveau de l&#8217;analyseur de regexp, pour cela, on utilise un « modificateur » Perl. Un <em>modifier</em> sert à changer le comportement de l&#8217;analyseur.</p>
<p>Le modificateur « ligne unique» est à ajouter dans l&#8217;expression régulière. Aussi, on place en début de la regexp, la chaîne suivante : « <strong>(?s)</strong> »</p>
<p>Maintenant, avec le<span style="color: #ff00ff;"> <strong>(?s)</strong></span>, les caractères de fin de ligne « <strong>\n</strong> » sont considérés comme n&#8217;importe quel caractère, (symbolisé par le point « . » dans une regexp), ce qui signifie que le texte à analyser devient un grand texte d&#8217;une seule ligne du point de vue de l&#8217;analyseur.</p>
<p>Ensuite la grosse difficulté est que l&#8217;on veut le code pour l&#8217;élément qui en <em>statutNumAppel</em> à <em>Actif</em>. La première idée de regexp est :</p>
<pre><strong><span style="color: #ff00ff;">(?s)</span><span style="color: #008000;">code&gt;(.+?)&amp;lt;/code</span><span style="color: #0000ff;">.+?statutNumAppel&gt;Actif</span></strong></pre>
<p>Malheureusement, cela ne fonctionnera pas, car on se trouve toujours avec le premier &#8216;code&#8217; (ici 1.87665308). Pourquoi, car le deuxième « <strong>.+? </strong>» va englober tous les caractères entre la première occurrence du code et le statut Actif.</p>
<p>Pour indiquer à l&#8217;analyseur de regexp que l&#8217;on veut « <em>le code qui est collé à l&#8217;Actif</em> », il faut être un peu plus explicite. Cette regexp sera la bonne <em>(après une bonne cinquantaine de tentative et relecture de la documentation des regexp)</em> :</p>
<pre><strong><span style="color: #ff00ff;">(?s)</span><span style="color: #008000;">(?:&gt;.+?&amp;lt;/code.+)</span><span style="color: #ff9900;">{0,}</span><span style="color: #0000ff;">&gt;(.+?)&amp;lt;/code.+?</span><span style="color: #800080;">Actif</span></strong></pre>
<p>Celle-ci indique :</p>
<ul>
<li>Avec le <span style="color: #008000;"><strong>(?:&gt;.+?&amp;lt;/code.+)</strong></span> on indique un groupement (grâce aux parenthèses) que l&#8217;on ne veut pas enregistrer dans une variable <em>$x$</em> à cause du <strong>?:</strong> situé au début.</li>
<li>Avec<span style="color: #ff6600;"><strong> {0,}</strong></span> on indique que l&#8217;on veut ce groupement <span style="color: #008000;"><strong>(?:&gt;.+?&amp;lt;/code.+)</strong></span> de 0 à n fois, l&#8217;analyseur doit donc rechercher <strong>toutes</strong> les occurrences du code.</li>
<li>Avec le deuxième <span style="color: #0000ff;"><strong>&gt;(.+?)&amp;lt;/code.+</strong></span> on &#8216;<em>surprend</em>&#8216; l&#8217;analyseur pour lui dire que finalement on ne veut pas toutes les occurrences, mais<strong> les occurrences N – 1</strong> dans le groupement précédent</li>
<li>Avec le <span style="color: #800080;"><strong>Actif</strong></span> on lui précise que l&#8217;on veut l&#8217;<strong>occurrence N</strong> du &#8216;code&#8217; suivie par le statut <em>Actif</em>.</li>
</ul>
<p>Et voilà, c&#8217;est &#8216;simple&#8217;, une fois que l&#8217;on a trouvé&#8230; <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>En complément,</p>
<p>a) JMeter est par défaut en mode multiligne (pour l&#8217;avoir <em>explicitement</em>, il faut «<strong> (?m)</strong> en début d&#8217;expression régulière.</p>
<p>b) En mode ligne unique «<strong> (?s)</strong> », le début de la ligne est représentée par l&#8217;accent circonflexe « <strong>^</strong> », et la fin de ligne par le signe dollar « <strong>$</strong> »</p>
<p><span style="text-decoration: underline;">Pour en savoir plus sur les expressions régulières au niveau JMeter :</span></p>
<ul>
<li><a href="http://jakarta.apache.org/jmeter/usermanual/regular_expressions.html" target="_self">Page d&#8217;aide sur les regexp au niveau JMeter</a></li>
<li>La <a href="http://perldoc.perl.org/perlreref.html" target="_self">page des regexp en Perl</a>, c&#8217;est la même syntaxe dans JMeter</li>
</ul>
<p><span style="text-decoration: underline;">Pour tester ses regexp en dehors de JMeter :</span></p>
<ul>
<li><a title="ORO" href="http://jakarta.apache.org/oro/demo.html" target="_self">Demonstrateur ORO</a> sur le site de Jakarta ORO</li>
</ul>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>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/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

