{"id":554,"date":"2009-12-31T07:48:15","date_gmt":"2009-12-31T07:48:15","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?p=554"},"modified":"2011-05-17T22:41:11","modified_gmt":"2011-05-17T22:41:11","slug":"quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter","status":"publish","type":"post","link":"https:\/\/blog.milamberspace.net\/index.php\/2009\/12\/31\/quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter-554.html","title":{"rendered":"Quelques cas d&rsquo;utilisation de l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re dans JMeter"},"content":{"rendered":"<p>Voici un billet pour parler de l&rsquo;extracteur d&rsquo;expressions r\u00e9guli\u00e8res dans JMeter.<\/p>\n<p>Commen\u00e7ons par le plan de test : tr\u00e8s simple, une requ\u00eate avec en \u00e9l\u00e9ment fils un extracteur d&rsquo;expression r\u00e9guli\u00e8re.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p style=\"text-align: left;\">La requ\u00eate HTTP est simplement la page d&rsquo;accueil de ce blog.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"La requ\u00eate HTTP mod\u00e8le\" src=\"\/wp-content\/images\/jmeter26-regexp\/02-jmeter-regexp.png\" alt=\"\" width=\"568\" height=\"248\" \/><\/p>\n<p>On place un \u00e9chantillon D\u00e9bogage apr\u00e8s la requ\u00eate HTTP qui poss\u00e8de l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re, il permet d&rsquo;afficher diff\u00e9rentes informations internes \u00e0 JMeter. Ici, on s&rsquo;int\u00e9resse aux valeurs des variables de JMeter.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"L\u00e9chantillon D\u00e9bogage\" src=\"\/wp-content\/images\/jmeter26-regexp\/03-jmeter-regexp.png\" alt=\"\" width=\"236\" height=\"151\" \/><\/p>\n<p>Ensuite (enfin) vient l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re, on commence par un \u00ab\u00a0simple\u00a0\u00bb.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Lextracteur dexpression r\u00e9guli\u00e8re JMeter\" src=\"\/wp-content\/images\/jmeter26-regexp\/04-jmeter-regexp.png\" alt=\"\" width=\"486\" height=\"238\" \/><\/p>\n<p>Quelques explications :<!--more--><\/p>\n<ul>\n<li><strong>Champs r\u00e9ponse \u00e0 cocher :<\/strong> Corps. La port\u00e9e de l&rsquo;extracteur regexp sera le corps de la r\u00e9ponse (le texte html en g\u00e9n\u00e9ral)<\/li>\n<li><strong>Nom de r\u00e9f\u00e9rence :<\/strong> le nom de la variable dans laquelle JMeter va d\u00e9poser les donn\u00e9es r\u00e9cup\u00e9r\u00e9e par l&rsquo;expression r\u00e9guli\u00e8re<\/li>\n<li><strong>Expression r\u00e9guli\u00e8re :<\/strong> ici \u00ab\u00a0(milamber)\u00a0\u00bb, qui signifie : \u00ab\u00a0je recherche le mot milamber, et je voudrais r\u00e9cup\u00e9rer la valeur\u00a0\u00bb. Il n&rsquo;y a pas \u00e0 proprement parler d&rsquo;expression r\u00e9guli\u00e8re ici, car aucun caract\u00e8res de correspondance de caract\u00e8res n&rsquo;est utilis\u00e9 (par exemple \u00ab\u00a0*\u00a0\u00bb).<\/li>\n<li><strong>Canevas :<\/strong> $1$ correspondant au premier \u00ab\u00a0couple\u00a0\u00bb de parenth\u00e8ses dans l&rsquo;expression r\u00e9guli\u00e8re. Donc ici \u00ab\u00a0milamber\u00a0\u00bb<\/li>\n<li><strong>Correspond au num. :<\/strong> 0. Parmi \u00ab\u00a0tous les milamber\u00a0\u00bb qui vont \u00eatre trouv\u00e9s, JMeter en choisi un au hasard et le place dans la variable JMeter NOM_VARIABLE<\/li>\n<li><strong>Valeur par d\u00e9faut :<\/strong> correspond \u00e0 la valeur que va prendre la variable NOM_VARIABLE si jamais l&rsquo;expression r\u00e9guli\u00e8re n&rsquo;est pas trouv\u00e9e (autrement si il n&rsquo;y a pas de milamber dans le corps de la r\u00e9ponse)<\/li>\n<\/ul>\n<p>On ex\u00e9cute (on lance) le test JMeter. Avec le r\u00e9cepteur Arbre de r\u00e9sultats, on peut d\u00e9j\u00e0 voir les donn\u00e9es de r\u00e9ponse de la page d&rsquo;accueil de ce site. On voit qu&rsquo;il y a plusieurs occurrences de \u00ab\u00a0milamber\u00a0\u00bb.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Les donn\u00e9es de r\u00e9ponses\" src=\"\/wp-content\/images\/jmeter26-regexp\/05-jmeter-regexp.png\" alt=\"\" width=\"638\" height=\"359\" \/><\/p>\n<p>Dans l&rsquo;\u00e9chantillon D\u00e9bogage, dans l&rsquo;onglet Donn\u00e9es de r\u00e9ponse, on retrouve la variable <em>NOM_VARIABLE<\/em>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Quelques explications sur les diff\u00e9rents \u00ab\u00a0NOM_VARIABLExxx\u00a0\u00bb que l&rsquo;on trouve.<\/p>\n<ul>\n<li><strong>NOM_VARIABLE=milamber<\/strong>, correspond bien entendu \u00e0 la valeur recherch\u00e9e (et donc trouv\u00e9e par JMeter) \u00e0 partir de l&rsquo;expression r\u00e9guli\u00e8re<\/li>\n<li><strong>NOM_VARIABLE_g=1<\/strong>, c&rsquo;est le nombre de variables $x$ trouv\u00e9es<\/li>\n<li><strong>NOM_VARIABLE_g0<\/strong>=milamber, c&rsquo;est la chaine correspondant \u00e0 l&rsquo;expression r\u00e9guli\u00e8re enti\u00e8re<\/li>\n<li><strong>NOM_VARIABLE_g1<\/strong>=milamber, correspond \u00e0 ce qu&rsquo;a trouv\u00e9e l&rsquo;expression r\u00e9guli\u00e8re dans la partie entre parenth\u00e8ses<\/li>\n<\/ul>\n<p><em>Ici, la variable NOM_VARIABLE_g0 est la m\u00eame que NOM_VARIABLE_g1 car l&rsquo;expression r\u00e9guli\u00e8re est (milamber), et est tr\u00e8s simple. Dans le dernier exemple de ce billet, ce n&rsquo;est pas le cas, voir plus bas.<\/em><\/p>\n<p>Changeons l&rsquo;expression r\u00e9guli\u00e8re en mettant simplement un M majuscule \u00e0 Milamber :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Le r\u00e9sultat dans l&rsquo;\u00e9chantillon D\u00e9bogage, c&rsquo;est \u00ab\u00a0Milamber\u00a0\u00bb en majuscule. Donc l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re est sensible \u00e0 la casse.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"R\u00e9sultat\" src=\"\/wp-content\/images\/jmeter26-regexp\/08-jmeter-regexp.png\" alt=\"\" width=\"408\" height=\"208\" \/><\/p>\n<p>Changeons l&rsquo;expression r\u00e9guli\u00e8re par (Milember), donc volontairement avec une faute.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Ici, comme il n&rsquo;y a pas de mot <em>Milember<\/em> dans les donn\u00e9es de r\u00e9ponse de la page HTML retourn\u00e9e, la valeur de NOM_VARIABLE est la valeur par d\u00e9faut (ici le message d&rsquo;erreur).<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"R\u00e9sultats\" src=\"\/wp-content\/images\/jmeter26-regexp\/10-jmeter-regexp.png\" alt=\"\" width=\"410\" height=\"156\" \/><\/p>\n<p>Revenons \u00e0 (milamber) comme expression r\u00e9guli\u00e8re. Comme je sais qu&rsquo;il y a plusieurs \u00ab\u00a0milamber\u00a0\u00bb dans la page HTML, et que j&rsquo;aimerais bien <strong>tous<\/strong> les retrouver, on change la valeur du champ Correspond au num par \u00ab\u00a0<strong>-1<\/strong> \u00bb. Cette valeur va indiquer \u00e0 JMeter d&rsquo;aller chercher toutes les occurrences de l&rsquo;expression r\u00e9guli\u00e8re.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Dans la vue donn\u00e9es de r\u00e9ponses de l&rsquo;\u00e9chantillon D\u00e9bogage, on a maintenant une suite de<strong> NOM_VARIABLE_x<\/strong> o\u00f9 <strong>x<\/strong> correspond au num\u00e9ro de \u00ab\u00a0milamber\u00a0\u00bb trouv\u00e9. La variable NOM_VARIABLE se retrouve avec la valeur par d\u00e9faut.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Quand on regarde \u00e0 la fin des variables affich\u00e9es par l&rsquo;echantillon D\u00e9bogage, on trouve une variable sp\u00e9ciale <strong>NOM_VARIABLE_matchNr<\/strong> = 195. Ce dernier correspond au nombre de \u00ab\u00a0milamber\u00a0\u00bb trouv\u00e9.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>On a vu que l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re \u00e9tait sensible \u00e0 la casse. Pour le rendre \u00ab\u00a0<em>insensible<\/em> \u00bb, il suffit de faire pr\u00e9c\u00e9der l&rsquo;expression r\u00e9guli\u00e8re par \u00ab\u00a0(?i)\u00a0\u00bb.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Dans la liste des variables trouv\u00e9es, on a maintenant \u00e0 la fois des \u00ab\u00a0milamber\u00a0\u00bb et des \u00ab\u00a0Milamber\u00a0\u00bb.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>La derni\u00e8re expression r\u00e9guli\u00e8re va indiquer que l&rsquo;on recherche exclusivement les \u00ab\u00a0milamber\u00a0\u00bb suivi de quelque chose<strong> et <\/strong>suivi de \u00ab\u00a0.net\u00a0\u00bb. C&rsquo;est \u00e0 dire les milamber dans \u00ab\u00a0milamberspace.net\u00a0\u00bb.<\/p>\n<p>Le \u00ab\u00a0quelque chose\u00a0\u00bb est symbolis\u00e9 par \u00ab<strong> .+<\/strong> \u00bb<\/p>\n<p>Le suivi de \u00ab\u00a0.net\u00a0\u00bb est symbolis\u00e9 par \u00ab\u00a0<strong>?\\.net<\/strong> \u00bb o\u00f9 la barre oblique invers\u00e9e (l&rsquo;anti-slash) sert \u00e0 d\u00e9sactiver la propri\u00e9t\u00e9 particuli\u00e8re du point dans une expression r\u00e9guli\u00e8re.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Dans les r\u00e9sultats, on a donc que les \u00ab\u00a0milamber\u00a0\u00bb dans la cha\u00eene \u00ab\u00a0milamberspace.net\u00a0\u00bb.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" 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>\n<p>Voici pour ce billet montrant quelques cas d&rsquo;utilisation de l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re. Bien entendu, ce dernier n&rsquo;est pas limit\u00e9 \u00e0 ces cas, il ne tient qu&rsquo;\u00e0 vous de faire de belles expressions r\u00e9guli\u00e8res pour extraire des cha\u00eenes \u00e0 partir des r\u00e9ponses \u00e0 vos requ\u00eates.<\/p>\n<p>Bonnes regexps !<\/p>\n<p>Deux liens :<\/p>\n<ul>\n<li><a href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/component_reference.html#Regular_Expression_Extractor\">La page du manuel JMeter sur l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re<\/a><\/li>\n<li><a href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/regular_expressions.html\">La page du manuel JMeter sur les expressions r\u00e9guli\u00e8res<\/a><\/li>\n<\/ul>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici un billet pour parler de l&rsquo;extracteur d&rsquo;expressions r\u00e9guli\u00e8res dans JMeter. Commen\u00e7ons par le plan de test : tr\u00e8s simple, une requ\u00eate avec en \u00e9l\u00e9ment fils un extracteur d&rsquo;expression r\u00e9guli\u00e8re. La requ\u00eate HTTP est simplement la page d&rsquo;accueil de ce blog. On place un \u00e9chantillon D\u00e9bogage apr\u00e8s la requ\u00eate HTTP qui poss\u00e8de l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re, &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/2009\/12\/31\/quelques-cas-d-utilisation-de-l-extracteur-d-expression-reguliere-dans-jmeter-554.html\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Quelques cas d&rsquo;utilisation de l&rsquo;extracteur d&rsquo;expression r\u00e9guli\u00e8re dans JMeter<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,169],"tags":[202,330,164],"class_list":["post-554","post","type-post","status-publish","format-standard","hentry","category-jmeter","category-test-fonctionnel","tag-expression-reguliere","tag-jmeter","tag-regexp"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/comments?post=554"}],"version-history":[{"count":5,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/554\/revisions"}],"predecessor-version":[{"id":902,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/posts\/554\/revisions\/902"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/categories?post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/tags?post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}