JMeter – Composant HTML Link Parser

HTML Link Parser est un composant de Apache JMeter qui mérite à être connu. En effet ce petit composant permet d’accélérer la variabilisation d’un scénario 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écupéré de la documentation officielle du JMeter, et adapté pour avoir simplement un appel à tous les liens d’une page sans descendre à un niveau inférieur.

Voici l’arborescence JMeter de ce scénario « orienté » spider. Je précise tout de suite qu’il ne s’agit pas à proprement parlé d’un aspirateur de sites, puisque les pages HTML ne sont pas enregistrées sur le disque, et ne permettent pas une navigation off-line.

Arborescence Jmeter

Cette arborescence traduit le fonctionnement suivant :

  1. JMeter demande la page d’accueil du site à « aspirer » (le premier HTTP Request dans le contrôleur Once Only Controller)
  2. Cette page est ensuite analysée au niveau de ses liens URL, et à chaque itération de JMeter une nouvelle page est demandée (le deuxième HTTP Request)
  3. L’élément Result Status Action Handler permet de stopper l’exécution après que tous les liens de la page d’accueil ait été trouvés.

L’élément Thread Group sera paramétré avec un nombre de threads à 1, et un déroulement infini (Forever).

Elément Thread Group

L’élément User Defined Variables permettra de simplifier sa réutilisation. On donnera ici :

  • l’URL cible : par exemple blog.milamberspace.net 😉
  • et le chemin ciblé : /

Elément user Defind Variables

Le premier HTTP Request permet de donner à JMeter la page à « parser » avec son composant HTML Link Parser. On fait appel aux variables précédentes pour remplir les champs Server Name et Path.

Premier HTTP Request

Le deuxième HTTP Request est légèrement différent, puisque dans le champ Path, on ajoute l’expression régulière « (.*) » qui est un paramètre pour l’élément HTML Link Parser . Il lui indique qu’il faut utiliser toutes les URIs en effet, (.*) signifiant « tous les caractères ».

L’élément Result Status Action Handler sera configuré en « Stop Thread » afin de stopper l’exécution de JMeter dès que l’élément HTML Link Parser ne trouve plus de nouvelles URI.

Elément Result Status Action Handler

Et voilà l’exécution…

Exécution du JMeter

Revenons à la raison d’écriture de ce billet… Le composant HTML Link Parser permet donc de récupérer un lien HTML (URL) à travers une expression régulière (RegExp de type Perl (précisément Jakarta-ORO)), et de faire appel à ce lien avec l’aide de l’élément HTTP Request.

Donc imaginez que vous avez un test de charge à faire sur un site avec une grande suite d’écrans fonctionnels, c’est-à-dire typiquement un enchaînement d’écrans pour, par exemple, la création d’un contrat client (type de contrat, adresse facture client, adresse de livraison, option de contrat, etc)… et que le passage d’un écran à l’autre passe des paramètres en méthode GET.

Pour variabiliser ce passage (écran 1 à écran 2), il suffit de mettre un HTML Link Parser en sous-élément de l’écran 2 (HTTP Request), et ce dernier ayant dans le champ Path quelque chose comme « /chemin/page_ecran_2.jsp.* ». Ceci sera remplacé par « /chemin/page_ecran_2.jsp?param1=toto&param2=titi&etc=etc » lors de l’exécution du tir.

L’avantage est bien entendu que l’on n’a pas besoin de se soucier des paramètres et de leurs variabilisations, car c’est récupéré dynamiquement.

./

Flattr this!

2 commentaires

  1. Testeur dit :

    Bonjour,

    J’ai utilisé cette méthode de « HTML Link Parser » pour pouvoir récupérer automatiquement les paramètres du lien :
    La méthode est POST.
    J’ai ajouter « HTML Link Parser » en sous-élément de mon écran,
    Dans le Path, j’ai mis /custcare_cu/SolutionUnitServlet?SuStepName=SelectProduct_Step&SuToken(.*)
    le lien que je cherche ressemble à ceci : /custcare_cu/SolutionUnitServlet?SuStepName=SelectProduct_Step&SuToken=23cde3848487744f9ccd96dfacbd4b

    Mais malheureusement, l’expression régulière n’a pas été remplacé, la requête envoyée par Jmeter est :

    POST http://172.20.20.87:21180/custcare_cu/SolutionUnitServlet?SuStepName=ContactsOverview_Step&SuToken(.*)

    Merci pour ton aide.

  2. Milamber dit :

    Bonjour,
    Mets plutôt :
    /custcare_cu/SolutionUnitServlet?SuStepName=SelectProduct_Step&SuToken.* dans le chemin de la (2eme) page. (pas de parenthèses)

    Par contre, l’élément HTML Link Parser est pour les requêtes de type GET (et non POST).
    Or tu indiques « POST http://…. » avec des paramètres dans l’URI. Ce qui n’est pas habituel car le POST envoi ses paramètres dans les entêtes HTTP. Il faut vérifier le fonctionnement de ton application. Éventuellement changer le type de méthode à GET dans la 2eme page.
    A+