[JMeter] Création et exécution de jeu de test

JMeter est un outil open-source permettant de faire des tests fonctionnels, ainsi que des tests de montée en charge d'applications web.

Sa configuration n'étant pas très intuitive, nous allons voir dans ce billet comment :
1- Enregistrer un jeu de test ;
2- Placer des assertions ;
3- Jouer le jeu de test.

Vous trouverez à la fin de ce billet le plan de test d'exemple qui a servi à sa rédaction.

1- Enregistrer un jeu de test

Pour enregistrer simplement les différentes actions faites sur l'application, JMeter contient un proxy HTTP. Ce proxy va sauvegarder les requêtes qu'il verra passer, ce qui permettra de les réutiliser dans le jeu de test.

Configuration du navigateur

Il faut d'abord dire à votre navigateur d'utiliser le proxy de JMeter, à l'adresse localhost, et sur un port libre (ici 9999).

Configuration de JMeter

  • Faire un clic-droit sur "Plan de test" > Ajouter > Groupe d'unités. Ce groupe d'unités (ou groupe de threads), va stocker les requêtes qui seront enregistrées par le proxy. Nous reviendrons sur sa configuration lors des tests de montée en charge.
  • Faire un clic-droit sur "Plan de travail" > Ajouter > Eléments hors test > Serveur proxy HTTP.

JMeter-Configuration_proxy_http.png

Les différents points de configuration sur cet écran sont :

  1. Le port qui est utilisé pour enregistrer les requêtes ;
  2. Le contrôleur cible, qui va contenir les requêtes enregistrées ;
  3. Les motifs d'URL à inclure et à exclure (attention à la syntaxe : .*\.extension).

Il ne reste plus qu'à lancer le serveur.

Enregistrement

Pour cet exemple, nous allons naviguer sur l'interface de management d'un tomcat lancé en local, et déployer une nouvelle application (ce qui va permettre de tester l'upload de fichier).
Au fur et à mesure de la navigation, les requêtes se rajoutent au groupe d'unités spécifié dans le proxy. Par défaut elles sont nommées par le chemin de la page, mais il est conseillé de les renommer pour avoir des résultats plus parlant lors de l'exécution du jeu de test.

Lors du déploiement d'une nouvelle application (et donc de l'upload d'un fichier), on peut voir que JMeter a bien sauvegardé le fichier utilisé dans la requête :

JMeter-Deploiement.png

Attention : il faut que le fichier en question soit dans le répertoire /bin de jmeter.

2- Placer des assertions

Les assertions servent à vérifier que la navigation se passe correctement, et que la page demandée s'affiche correctement lors de l'exécution automatique du jeu de test. Différents type d'assertions sont disponibles, nous allons ici faire de vérifications "de base" sur le contenu de la réponse.
Pour ajouter une assertion, faire un clic-droit sur la requête > Ajouter > Assertions > Assertion Réponse.

JMeter-Assertion.png

3- Jouer le jeu de test

Une fois le scénario enregistré, nous pouvons couper le proxy, et fermer le navigateur. Quelques étapes de configuration sont encore nécessaires afin de pouvoir exécuter notre jeu de test, et monitorer notre serveur.

Configuration HTTP

Pour permettre à JMeter de se connecter à l'administration de tomcat, il faut rajouter un composant d'authentification spécifique, en faisant un clic-droit sur "Groupe d'unités" > Ajouter > Configuration > "Gestionnaire d'autorisation HTTP".
Il faut paramétrer ce composant en indiquant l'identifiant et le mot de passe de connexion à l'administration du serveur.

JMeter-Gestionnaire_autorisations_http.png

Pour pouvoir suivre la santé du serveur, il faut ajouter une requête HTTP (clic-droit sur "Groupe d'unités" > Ajouter > Echantillons > Requête HTTP) vers la page de monitoring de tomcat /manager/status, en ajoutant le paramètre XML avec la valeur true, et indiquer qu'il faut utiliser cette requête en tant que moniteur.

JMeter-Server_status.png

Il faut indiquer à JMeter les paramètres par défaut (adresse IP, port, chemin de l'application) à utiliser pour exécuter les requêtes qu'il a enregistré. Pour cela, il faut faire un clic-droit sur "Groupe d'unités" > Ajouter > Configurations > Paramètres HTTP par défaut.

JMeter-Parametres_HTTP.png

Ce composant permet de dissocier l'enregistrement du scénario, et son exécution sur des serveurs différents.
Attention : pour exécuter le scénario en local, il faut bien mettre 127.0.0.1 en nom/adresse, et non pas localhost.

Monitoring

Le groupe d'unités permet de paramétrer l'exécution même du jeu de test. Son paramétrage est assez poussé en laissant la main sur le nombre d'utilisateurs, le nombre d'itérations du plan de test, la durée de montée en charge, la possibilité de programmer le démarrage des test, ...

JMeter-Groupe_d__unites.png

Différents "récepteurs" (=listeners, clic-droit sur "Groupe d'unités" > Ajouter > Récepteurs > ...) existent, selon ce que l'on veut monitorer : charge/mémoire du serveur, temps d'exécution des requêtes, ...
Je vais montrer ceux que je trouve le plus parlant.

Le moniteur de résultats s'appuie sur la requête HTTP que l'on a paramétrée à l'étape précédente. Il permet d'avoir une vue de la santé globale du serveur, ainsi que des informations plus détaillées sur la mémoire et le nombre d'exécuteurs tomcat disponibles :

JMeter-Moniteur_Sante.png

JMeter-Moniteur_Perf.png

L'arbre de résultats permet de vérifier que les différentes assertions que l'on a pu placer sont bien vérifiées, avec les informations de la requête et de la réponse.

JMeter-Arbre_resultats.png

Enfin, le rapport agrégé permet d'avoir les statistiques de temps d'exécution de chaque requête.

JMeter-Rapport_agrege.png

À noter que chaque récepteur permet d'enregistrer les résultats des tests dans un fichier csv, ce qui permet de l'utiliser après dans votre tableur favori pour exploiter différemment les données.

Bons tests !

4 commentaires

  1. Remarkable things here. I am very glad to see your post. Thanks a lot and I’m looking ahead to contact you. Will you kindly drop me a mail?

  2. Remarkable things here. I am very glad to see your post. Thanks a lot and I’m looking ahead to contact you. Will you kindly drop me a mail?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.