<?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; 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>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>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 qui [...]]]></description>
			<content:encoded><![CDATA[<p style="">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 style="">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 style="">Commençons, soit le texte de réponse d&#8217;une requête HTTP (utilisant en fait SOAP/XML-RPC) suivant :</p>
<pre style="">&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 style=""><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 style="">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 style="">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 style="">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 style="">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 style="">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 style="">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 style=""><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 style="">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 style="">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 style=""><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 style="">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 style="">Et voilà, c&#8217;est &#8217;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 style="">En complément,</p>
<p style="">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 style="">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 style=""><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 style=""><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 style="">
<p style="">./</p>
<p style="">
]]></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>
