Les tests de charge avec JMeter 4/4

JMeter logo

Maintenant qu’on a réussi à se connecter sur le site WordPress, on va continuer à enrichir le scénario pour créer un article. On va d’abord afficher le tableau de bord du backoffice de WordPress, puis la liste des articles. A partir de cette page on va cliquer sur le bouton Ajouter pour créer un nouvel article

Backoffice WordPress, bouton Ajouter un article en rouge

Ensuite on saisit un titre et un texte dans le contenu, puis, on clique sur le bouton « Publier ».

Ensuite, on retourne sur la page qui affiche tous les articles et on le supprime en cliquant sur le lien Corbeille qui apparaît sous l’article lorsqu’on passe la souris sur l’article.

On voit le « nonce » dans l’URL de mise à la corbeille

On arrête l’enregistrement du scénario à cette étape, on reprendra ensuite pour vider la corbeille et se déconnecter.

Par contre, il faut absolument conserver les éléments du « View Result Tree » lors de l’enregistrement, car c’est par les données de l’enregistrement qu’on va pouvoir retrouver les « nonces » à passer dans les requêtes. En effet, on va vite s’apercevoir qu’une page comme celle qui affiche tous les article wp-admin/edit.php va produire plusieurs « nonces » par article affiché, ne serait que celui pour le modifier et celui pour le supprimer. Mais si vous avez des plugins, comme un gestionnaire de cache, il va également ajouter un « nonce » par page, pour purger le cache.

La technique qui va nous permettre de savoir quel « nonce » est utilisé à quel moment, est la suivante :

1 – Sauvegarder le résultat de l’enregistrement dans un fichier

Là on parle d’enregistrer le « View Result Tree » du « Test Script Recorder ». il faut fournir un fichier pour que le Script Recorder stocke les résultats. Par défaut, tout ce qui est nécessaire est coché dans la configuration

Configuration de l’enregistrement du fichier du « Test Script Recorder »

2 – Enregistrer une partie du scénario

J’écris « une partie », car enregistrer un scénario complet, même simple, comme par exemple pour WordPress, se connecter, afficher les articles, créer un article, saisir du texte, publier l’article, supprimer l’article, vider la corbeille et enfin se déconnecter, va produire plus d’une cinquantaine de requêtes, car il y a de l’Ajax qui entre en jeu.

On se retrouve assez vite noyé avec le décalage entre les actions et les requêtes. Donc procéder par étape allège un peu le travail. C’est la raison pour laquelle on a commencé par l’étape où on se connecte à WordPress. Maintenant on va regarder la suite : afficher les articles, créer un article, le publier et le mettre à la corbeille.

On va enrichir notre scénario du login. On définit le « Counter start value » à 120 afin d’avoir une suite de numéros croissants pour identifier les URLs du Thread Plan.

On démarre le scénario en se connectant, mais sans lancer l’enregistrement, qu’on va démarrer à l’affichage de la page « Tous les articles ». C’est à dire qu’on démarre l’enregistrement, on définit le proxy dans le navigateur et on affiche l’URL /wp-admin/edit.php

On crée l’article, on le publie et on le met à la corbeille.

A la fin de l’enregistrement, on voit une vingtaine d’URLs supplémentaires dans le Thread Plan

Scénario avec la création/suppression de l’article 788

On peut noter que dans deux des URLs, la 146 et la 151, l’identifiant 788 de l’article apparaît. Il va falloir rendre cette valeur variable pour suivre la valeur de cet incrément.

3 – Lancer le scénario et faire l’état des lieux

Si on rejoue le scénario sans faire de retouche, on va constater les erreurs dans l’item « View Result Tree » du Thread Plan. Toutes les pages en rouges ont reçu des 403 Forbidden, et la page 153 wp-admin/edit.php affiche l’article créé.

Les erreurs du « View Result Tree » du « Thread Plan »

Les erreurs de permission sont liées aux « nonces ». On a renvoyé les valeurs enregistrées précédemment au lieu des aléas fournis par WordPress.

A partir de cette étape, il suffit d’éliminer les erreurs une par une !!

4 – Mettre l’identifiant de l’article en variable

On a vu que notre enregistrement a créé l’article n°788. Il faut chercher cette valeur dans la réponse (Response Body) de la création d’article : post-new.php. On trouve de nombreuses références à l’article 788, mais la plus simple à extraire, donc celle qui est la plus discriminante se trouve dans le bloc :

<script id='wp-editor-js-before'> var _wpMetaBoxUrl = "https:\/\/alain.arditi.fr\/wp-admin\/post.php?post=788&action=edit&meta-box-loader=1&meta-box-loader-nonce=fc2b874bfc"; </script>

qu’on voit sur le panneau de droite lorsqu’on fait la recherche de 788

Recherche des URLs contenant l’id de l’article 788

L’expression régulière pour extraire l’id_article, va être :
post.php\?post=([^&]+)&
A noter le \ devant le ? car sinon, le ? génère une expression régulière et produit une erreur. On peut désormais utiliser la variable ${id_article} partout où apparaît 788 dans le scénario.

Extraction de l’id_article

On lance la recherche de 788 avec les jumelles JMeter bouton jumelles on voit sur le panneau de gauche les URLs qui contiennent ce numéro. On peut même faire un Search/Replace de 788 par ${id_article} en faisant attention aux valeurs qu’on remplace.

Recherche de l’id_article 788 dans les URLs

Dans le cas de l’URL 151 – /wp-json/wp/v2/posts/788?_locale=user on remplace le 788 dans l’URLs par ${id_article}, mais aussi dans le texte de l’article, comme ça chaque article créé par le scénario aura un titre différent.

Ajout de la variable ${id_article} dans le titre

Voila un exemple de correction des problèmes liés à l’id_article.

Pour que le scénario fonctionne, il reste encore une dizaine de valeurs en dur, surtout des « nonces » à extraire et à mettre en variable. Afin d’alléger l’article, on va uniquement voir comment trouver le « nonce » pour mettre l’article à la corbeille. C’est le cas le plus complexe, car la mise à la corbeille est une URL qui contient l’id_article, donc une expression régulière variable ! Elle est de la forme : post=${id_article}&action=trash&_wpnonce=([^"]+)"

On va explorer comment faire une expression régulière pour extraire le nonce avec la variable id_article dans l’expression.