{"id":70,"date":"2008-04-05T20:35:18","date_gmt":"2008-04-05T20:35:18","guid":{"rendered":"http:\/\/blog.milamberspace.net\/index.php\/jmeter-\u2013-composant-html-link-parser"},"modified":"2012-09-28T07:00:38","modified_gmt":"2012-09-28T06:00:38","slug":"jmeter-composant-html-link-parser","status":"publish","type":"page","link":"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-composant-html-link-parser","title":{"rendered":"JMeter &#8211; Composant HTML Link Parser"},"content":{"rendered":"<p><strong>HTML Link Parser<\/strong> est un composant de Apache JMeter qui m\u00e9rite \u00e0 \u00eatre connu. En effet ce petit composant permet d&rsquo;acc\u00e9l\u00e9rer la variabilisation d&rsquo;un sc\u00e9nario de test.<\/p>\n<p>Avant de vous montrer comment cela est possible, voici une utilisation du composant <strong>HTML Link Parser<\/strong> : un spider (un aspirateur de site). Cet exemple est r\u00e9cup\u00e9r\u00e9 de <a title=\"Element HTML Link Parser sur le site JMeter\" href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/component_reference.html#HTML_Link_Parser\" target=\"_blank\">la documentation officielle du JMeter<\/a>, et adapt\u00e9 pour avoir simplement un appel \u00e0 tous les liens d&rsquo;une page sans descendre \u00e0 un niveau inf\u00e9rieur.<\/p>\n<p>Voici l&rsquo;arborescence JMeter de ce sc\u00e9nario \u00ab orient\u00e9 \u00bb spider. Je pr\u00e9cise tout de suite qu&rsquo;il ne s&rsquo;agit pas \u00e0 proprement parl\u00e9 d&rsquo;un aspirateur de sites, puisque les pages HTML ne sont pas enregistr\u00e9es sur le disque, et ne permettent pas une navigation off-line.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-01.png\" border=\"1\" alt=\"Arborescence Jmeter\" width=\"255\" height=\"300\" \/><\/p>\n<p>Cette arborescence traduit le fonctionnement suivant :<\/p>\n<ol>\n<li>JMeter demande la page d&rsquo;accueil du site \u00e0 \u00ab aspirer \u00bb (le premier <strong>HTTP Request<\/strong> dans le contr\u00f4leur <strong>Once Only Controller<\/strong>)<\/li>\n<li>Cette page est ensuite analys\u00e9e au niveau de ses liens URL, et \u00e0 chaque it\u00e9ration de JMeter une nouvelle page est demand\u00e9e (le deuxi\u00e8me <strong>HTTP Request<\/strong>)<\/li>\n<li>L&rsquo;\u00e9l\u00e9ment <strong>Result Status Action Handler<\/strong> permet de stopper l&rsquo;ex\u00e9cution apr\u00e8s que tous les liens de la page d&rsquo;accueil ait \u00e9t\u00e9 trouv\u00e9s.<\/li>\n<\/ol>\n<p>L&rsquo;\u00e9l\u00e9ment<strong> Thread Group<\/strong> sera param\u00e9tr\u00e9 avec un nombre de threads \u00e0 1, et un d\u00e9roulement infini (Forever).<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-01bis.png\" border=\"1\" alt=\"El\u00e9ment Thread Group\" width=\"439\" height=\"268\" \/><\/p>\n<p>L&rsquo;\u00e9l\u00e9ment <strong>User Defined Variables<\/strong> permettra de simplifier sa r\u00e9utilisation. On donnera ici :<\/p>\n<ul>\n<li><span style=\"text-decoration: underline;\">l&rsquo;URL cible :<\/span> par exemple blog.milamberspace.net \ud83d\ude09<\/li>\n<li><span style=\"text-decoration: underline;\">et le chemin cibl\u00e9<\/span> : \/<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-02.png\" border=\"1\" alt=\"El\u00e9ment user Defind Variables\" width=\"533\" height=\"160\" \/><\/p>\n<p>Le premier <strong>HTTP Request<\/strong> permet de donner \u00e0 JMeter la page \u00e0 \u00ab parser \u00bb avec son composant <strong>HTML Link Parser<\/strong>. On fait appel aux variables pr\u00e9c\u00e9dentes pour remplir les champs <strong>Server Name<\/strong> et <strong>Path.<\/strong><\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-03.png\" border=\"1\" alt=\"Premier HTTP Request\" \/><\/p>\n<p>Le deuxi\u00e8me <strong>HTTP Request<\/strong> est l\u00e9g\u00e8rement diff\u00e9rent, puisque dans le champ <strong>Path,<\/strong> on ajoute l&rsquo;expression r\u00e9guli\u00e8re \u00ab (.*) \u00bb qui est un param\u00e8tre pour l&rsquo;\u00e9l\u00e9ment <strong>HTML Link Parser<\/strong> . Il lui indique qu&rsquo;il faut utiliser toutes les URIs en effet, (.*) signifiant \u00ab tous les caract\u00e8res \u00bb.<\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-04.png\" border=\"1\" alt=\"\" \/><\/p>\n<p>L&rsquo;\u00e9l\u00e9ment <strong>Result Status Action Handler<\/strong> sera configur\u00e9 en \u00ab Stop Thread \u00bb afin de stopper l&rsquo;ex\u00e9cution de JMeter d\u00e8s que l&rsquo;\u00e9l\u00e9ment <strong>HTML Link Parser<\/strong> ne trouve plus de nouvelles URI.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-05.png\" border=\"1\" alt=\"El\u00e9ment Result Status Action Handler\" width=\"533\" height=\"148\" \/><\/p>\n<p style=\"text-align: center;\">Et voil\u00e0 l&rsquo;ex\u00e9cution&#8230;<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter06-img\/Jmeter-HTML-Link-Parser-Sider-06.png\" border=\"1\" alt=\"Ex\u00e9cution du JMeter\" width=\"688\" height=\"157\" \/><\/p>\n<p>Revenons \u00e0 la raison d&rsquo;\u00e9criture de ce billet&#8230; Le composant <strong>HTML Link Parser<\/strong> permet donc de r\u00e9cup\u00e9rer un lien HTML (URL) \u00e0 travers une expression r\u00e9guli\u00e8re (RegExp de type Perl (pr\u00e9cis\u00e9ment Jakarta-ORO)), et de faire appel \u00e0 ce lien avec l&rsquo;aide de l&rsquo;\u00e9l\u00e9ment <strong>HTTP Request<\/strong>.<\/p>\n<p>Donc imaginez que vous avez un test de charge \u00e0 faire sur un site avec une grande suite d&rsquo;\u00e9crans fonctionnels, c&rsquo;est-\u00e0-dire typiquement un encha\u00eenement d&rsquo;\u00e9crans pour, par exemple, la cr\u00e9ation d&rsquo;un contrat client (type de contrat, adresse facture client, adresse de livraison, option de contrat, etc)&#8230; et que le passage d&rsquo;un \u00e9cran \u00e0 l&rsquo;autre passe des param\u00e8tres en m\u00e9thode GET.<\/p>\n<p>Pour variabiliser ce passage (\u00e9cran 1 \u00e0 \u00e9cran 2), il suffit de mettre un <strong>HTML Link Parser <\/strong>en sous-\u00e9l\u00e9ment de l&rsquo;\u00e9cran 2 (<strong>HTTP Request<\/strong>), et ce dernier ayant dans le champ Path quelque chose comme \u00ab \/chemin\/page_ecran_2.jsp<strong>.* <\/strong>\u00bb. Ceci sera remplac\u00e9 par \u00ab \/chemin\/page_ecran_2.jsp?param1=toto&amp;param2=titi&amp;etc=etc \u00bb lors de l&rsquo;ex\u00e9cution du tir.<\/p>\n<p>L&rsquo;avantage est bien entendu que l&rsquo;on n&rsquo;a pas besoin de se soucier des param\u00e8tres et de leurs variabilisations, car c&rsquo;est r\u00e9cup\u00e9r\u00e9 dynamiquement.<\/p>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>HTML Link Parser est un composant de Apache JMeter qui m\u00e9rite \u00e0 \u00eatre connu. En effet ce petit composant permet d&rsquo;acc\u00e9l\u00e9rer la variabilisation d&rsquo;un sc\u00e9nario de test. Avant de vous montrer comment cela est possible, voici une utilisation du composant HTML Link Parser : un spider (un aspirateur de site). Cet exemple est r\u00e9cup\u00e9r\u00e9 de &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-composant-html-link-parser\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter &#8211; Composant HTML Link Parser<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":85,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-70","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"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=70"}],"version-history":[{"count":10,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/70\/revisions"}],"predecessor-version":[{"id":1211,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/70\/revisions\/1211"}],"up":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/85"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}