« Jmeteriser » son scénario fonctionnel
Ecrire son scénario fonctionnel dans JMeter
Avec JMeter, on peut bien sur, définir son scénario de test manuellement pour chaque appel de page avec le ou les paramètres associés… cela sera long et fatiguant. Surtout cela va donner lieu à une phase de vérification de son scénario « jmeterisé » importante car il risque d’y avoir des « bugs », normal, c’est du travail « manuel ».
JMeter propose une fonctionnalité « proxy » qui peut enregistrer une session de navigation directement dans des échantillons de Requête HTTP. Du coup, la « jmeterisation » devient plus facile et rapide. Après l’enregistrement de la session de navigation, on aura juste des ajustements à faire afin notamment de de rendre dynamique les données de tests.
La session de navigation est donc une exécution unitaire du scénario fonctionnel cible, sur son navigateur. La session est enregistrée par JMeter en même temps.
Comment faire ?
Lancer JMeter, (sous Windows, on utilisera le fichier JMETER_HOME/bin/jmeterw.cmd)

Sélectionner l’item Plan de travail, puis clic droit sur la souris, et ajouter un élément hors test > Serveur Proxy HTTP.

Puis aller sur l’item Plan de test, un clic droit sur la souris, et ajouter un élément Groupe d’unités.

Ensuite, sélectionner le nouvel élément Groupe d’unités, un clic droit sur la souris, et ajouter un élément Contrôleurs Logiques > Contrôleur Enregistreur.

Le Serveur Proxy HTTP et le Contrôleur Enregistreur sont les deux seuls éléments nécessaires pour l’enregistrement d’une session de navigation. Cependant nous allons y ajouter quelques autres éléments pour répondre à quelques contraintes et/ou pour nous faciliter le travail.
L’élément de configuration Paramètres HTTP par défaut va nous permettre de ‘variabiliser’ le nom du serveur web, son port, etc., c’est-à-dire que les requêtes HTTP (qui seront créées automatiquement lors de la session de navigation par le serveur Proxy HTTP), verront leur champ nom du serveur Web, Port, etc. vides.

Ensuite, dans l’élément de configuration, on paramétrera les champs suivants Nom ou adresse IP par la valeur du nom du serveur à tester, et le champ Port par la valeur du port du serveur (ici 8080) :

ATTENTION : si vous utilisez un Tomcat sur la même machine que votre JMeter, il y aura certainement un conflit sur le port 8080 (car Tomcat, par défaut utilise le 8080 et l’élément Serveur Proxy HTTP de JMeter utilise également le port 8080). Il convient donc de mettre des ports différents. Par exemple mettre 8081 dans le champ Port sur l’élément Serveur Proxy HTTP de JMeter (et dans le configuration du navigateur au niveau du proxy, cf. plus bas).
L’élément Gestionnaire de cookies HTTP va nous permettre de faire du suivi de cookie (en particulier le suivi de session). C’est-à-dire que JMeter va se comporter comme un navigateur Internet au niveau des cookies, en envoyant la valeur du cookies quand les conditions sont remplies.

On va cocher l’option Nettoyer les cookies à chaque itération ? afin d’avoir un éffacement des cookies (et autre session) à chaque itération lors du test de charges.

L’ajout du récepteur Arbre de résultats va permettre de voir les échanges HTTP, et si besoin, nous permettre de les consulter plus tard (à froid) lors de l’affinage du scénario de tir de charges.

Au final, on a donc les éléments suivants :

Avant de faire le démarrage du serveur Proxy de JMeter, on ira cocher le paramètre Ajouter une Assertion Réponse dans l’élément Serveur Proxy HTTP. Ce paramètre ajoutera pour chaque Requête HTTP un sous-élément assertion qui nous servira pour vérifier la validité de la réponse reçue lors du test de charges.
On va ensuite exclure les images GIF de l’enregistrement. Pour cela, dans la partie URL : motifs à exclure, on va ajouter la valeur suivant « .*\.gif » qui est l’expression régulière pour les URL qui contiennent un nom de fichier GIF.
A noter : l’exclusion des éléments associés à une page, c’est-à-dire les images, feuilles de style, etc. est un choix à faire en fonction du type de test de charge voulu. Par exemple pour un test de charges dont l’objectif est la validation de la tenue de performance du serveur d’applications et des temps de réponses, il est préférable de ne pas inclure les images dans le scénario de tir. Par contre, si l’objectif est la validation de la bande passante, les images et autres éléments sont à inclures.

Démarrage du serveur Proxy JMeter
Par défaut le serveur Proxy n’est pas lancé, il faut donc le démarrer pour qu’il puisse répondre aux demandes (requêtes) du navigateur qui seront faites pendant l’enregistrement de la session de navigation. Pour cela, on se place sur l’élément Serveur Proxy HTTP et on clique sur le bouton Lancer situé en bas.

Configuration du navigateur
Il faut ensuite configurer le navigateur pour qu’il utilise JMeter comme proxy. Par exemple avec le navigateur SeaMonkey, menu Edition > Préférences.
On renseigne les champs suivants :
- Configuration manuelle du proxy choisi
- Proxy : localhost (correspondant à l’adresse IP loopback 127.0.0.1)
- Port : 8080 (ce numéro de port doit être le même que la valeur du champ Port dans l’élément Serveur Proxy HTTP de JMeter, si par exemple, vous avez mis 8081 car le Tomcat est aussi le poste JMeter, alors, il faut mettre 8081 sur la configuration proxy de votre navigateur)

Également on configurera le navigateur pour ne pas avoir de cache, ainsi on videra son cache de navigateur avant la session d’enregistrement. Si on ne fait pas cela, on aura pour certains éléments des codes de retours HTTP 304 (i.e. Déjà dans le cache du navigateur) lors de leur premier appel. Et donc le test de charges sera faussé, car le robot ne récupéra pas « réellement » les éléments.

Et hop, tout est maintenant prêt pour démarrer sa navigation en suivant le scénario fonctionnel établi.
On prend donc son navigateur Internet (ici SeaMonkey) et on reproduit le scénario fonctionnel étape par étape, en étant calme et concentré, car tout ce l’on fait est enregistré par JMeter.
Pendant cette navigation, on remarquera dans la fenêtre JMeter que de nouveaux éléments de type Requête HTTP viennent s’ajouter en sous-éléments du Contrôleur Enregistreur.

Une fois sa session de navigation finie, on clique sur le bouton Arrêter de l’élément Serveur Proxy HTTP.

Et voilà le résultat de l’enregistrement au niveau de JMeter : 6 requêtes HTTP dans le Contrôleur Enregistreur.

Passons à l’étape suivante, l’affinage du scénario.
bonjour
et merci pour toutes ces informations !
Savez vous s’il possible de « variabiliser » avec cette technique, le nom/port du serveur web afin de passer les tests par exemple sur plusieurs installations différentes ?
Encore merci
Merci de remplacer nom/port par racine du chemin : nomduhost:port/ma variable/le reste du site
Oui c’est possible, il suffit d’ajouter au début (avant l’activation du proxy) un élément User Defined Variables (Config Element). Dedans, il faut déclarer les variables (par exemple : NOM_HOST = http://www.google.fr).
Ensuite JMeter lors de la session d’enregistrement proxy, va remplacer automatiquement les « www.google.fr » par ${NOM_HOST}
(tu peux aussi le faire manuellement à posteriori dans les éléments HTTP Request).
Tout cela est valable pour tout champ (port, variable utilisaeur, etc).
salut, cela fonctionne nickel ! J’attendais de le mettre en oeuvre avant de répondre.
Merci et encore bravo pour toutes ces infos !
Bonjour,
tres bon tutoriel!
Petite question: mon site passe la jsessionid dans la ligne de commande.
Cette sessionid est crée au moment du login.
Est ce qu’il est possible de variabiliser cette valeur?
Merci encore pour ce tutoriel!
Merci.
Oui c’est possible de variabiliser, et même très simple avec l’élément Post-processor Regular Expression Extractor. Ce dernier te permettant de récupérer via une expression régulière une chaîne.
Par exemple si ton URL est
http://www.toto.com/index.jsp;jsessionid=1234131243124DSFDZREZ
Tu peux utiliser cette expression réguilière :
jsessionid=(.*)
Plus d’infos :
http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Regular_Expression_Extractor
Bon courage
Milamber
Je souhaite faire une chose un peu identique. j’ai une requête de connexion qui s’exécute et un extracteur d’expression régulière configuré comme ceci :
Nom de référence : JSESSIONID
Expression régulière : jsessionid=(.*)
Canevas : $0$
Correspondant au num : 1
Valeur par défaut : ** Erreur**
puis dans la requête suivante :
j’utilise http://;jsessionid=${JSESSIONID}
Mon problème est que la requête transmise est prends toujours la valeur par défaut pour JSESSIONID : http://;jsessionid=** Erreur**
OU est-ce que je me plante ?
Pour info, le message de retour de ma première requête (celle qui contient l’extracteur) est du html avec un champ :
Version : indéfinie
Bonjour,
La réponse sur :
http://groups.google.com/group/jmeter-fr/browse_thread/thread/b075f75f55ac9485
A+
Bonjour,
Bravo encore pour ce site, qui fait gagner pas mal de temps dans la compréhension de cet outil.
Je rencontre aussi un pb, après avoir suivi cette procédure:
- Jmeter fonctionne lorsque je paramètre manuellement des requêtes HTTP
- puis, j’ai paramétré le proxy sur le port 8081
- j’ai paramétré internet explorer pour qu’il utilise ce proxy
et à l’invocation de mon site depuis le navigateur, j’obtiens l’erreur:
java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:457) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:889) at org.apache.jmeter.protocol.http.proxy.Proxy.run(Proxy.java:163)
Avez-vous une idée ?
Merci d’avance,
Cdlt,
Christian.
Bonjour,
Est-ce que le proxy JMeter est bien démarré ? (bouton Start)
Pour le vérifier, tu peux aussi faire dans une invite de commande :
netstat -an
où tu devrais trouver une ligne avec le port 8081 marqué en LISTEN (ou ECOUTE)
A+
A priori oui, puisque j’ai effectivement une ligne avec le port 8081 marqué en LISTENING…
Bonjours,
Je teste actuellement un webservice SOAP avec Junit.
Est-t’il possible d’enregistrer un scénario de test Junit comme une session de navigation ?
Comment paramétrer mes requêtes SOAP pour qu’elles prennent en compte le proxy ?
Eric.
Bonjour Haran,
Pourrais-tu basculer ta demande sur le groupe Jmeter-fr http://groups.google.com/group/jmeter-fr/
Tu pourrais ainsi joindre une capture d’ecran de la fenêtre de configuration du proxy Internet Explorer (Atl+Impr Ecran pour juste avoir la fenêtre) à ta demande.
Tu as aussi peut-être un firewall qui bloque le port ? (est ce que c’est le firewall de Windows ou un firewall avec ton antivirus ?) (normalement si tu mets bien 127.0.0.1 comme IP du proxy, le firewall n’est pas censé agir, mais bon je vérifie)
A+
Bonjour Eric,
Malheureusement je ne connais pas bien les api soap, tu pourrais renvoyer ta requête dans le groupe Jmeter-fr http://groups.google.com/group/jmeter-fr/ (ou je suis dessus), peut-être que quelqu’un peu t’aider.
Pour ma part, je dirais qu’il faut recherche dans la doc (api) si on peut préciser un proxy…
A+
Bonjour à tous,
je suis nouveau dans l’utilisation de JMeter et je dois dire que le tutoriel est excellent!
Je voudrais juste soulever un petit détail pendant mon étude sur JMeter:
J’utilise un Proxy en port 8080 pour accéder à Internet. Comme l’indique le tutoriel, JMeter utilise également le port 8080. J’ai donc reconfigurer mon navigateur Internet (IE) en port 8081 en localhost et redéfini au niveau de l’item « Serveur Proxy HTTP » le port 8080 en port 8081. J’ai donc défini le port 8080 au niveau de l’item « Paramètres HTTP par défaut ». Mon avantage est que j’accède à mon site en réseau local mais je ne peux faire aucun test via Internet. Jusqu’ici tous mes tests fonctionnent car je suis en réseau local. Comment puis-je configurer JMeter afin d’effectuer mes tests futurs via le Web? Merci d’avance encore pour ce formidable travail.
Cordialement.
DaddyP
Bonjour,
La réponse est dans la documentation de JMeter :
http://jakarta.apache.org/jmeter/usermanual/get-started.html
Paragraphe 2.4.2
Au lancement :
jmeter.bat -H IP_OU_NOM_PROXY -P PORT_PROXY
A+
Milamber
Merci d’avoir répondu aussi rapidement et merci pour le conseil.
j’ai ce message qui s’affiche après exécution de la commande:
Exception in thread « main » java.lang.UnsupportedClassVersionError: org/apache/jmeter/NewDriver (Unsupported major.minor version 48.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
errorlevel=1
Appuyez sur une touche pour continuer…
Je précise que je ne suis pas expert en langage de programmation encore moins en java
Merci encore de votre aide
DaddyP
Bonjour,
En général une erreur ClassVersion signifie un problème de compatibilité de JVM.
C’est quoi la version de Java que tu utilises (commande « java -version »)
A+
Bonjour,
merci je viens de trouver mon erreur… Effectivement il s’agit bien d’une erreur de version.
Merci encore d’avoir répondu
DaddyP
bonjour,
je voulais tester de créer des scripts donc avec jmeter, seulement je dois à un moment télécharger un fichier sur mon bureau pour l’appli. et a ce moment là, j’ai un problème:
voici l’erreur qui s’affiche:
java.io.FileNotFoundException: fichier.txt (Le fichier sp�cifi� est introuvable)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(Unknown Source)
at java.io.FileInputStream.(Unknown Source)
at org.apache.jmeter.protocol.http.sampler.PostWriter.writeFileToStream(PostWriter.java:406)
at org.apache.jmeter.protocol.http.sampler.PostWriter.sendPostData(PostWriter.java:115)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sendPostData(HTTPSampler.java:159)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:514)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1037)
at org.apache.jmeter.protocol.http.proxy.Proxy.run(Proxy.java:195)
je ne sais pas du tout comment faire pour télécharger mon fichier, si je dois le mettre ailleur, et si une fois le script terminé, je pourrais le relancer, sans jmeter configuré en proxy, et si cela marchera?
est-il possible de m’aider?
merci beaucoup!!!
Bonjour,
J’ai l’impression que tu ne donnes pas dans JMeter le chemin complet du fichier « fichier.txt » au niveau du champ pour le nom du fichier à uploader ?
A+
ben, quand je créé le script avec jmeter, je ne donne rien a jmeter en lui meme, dans le site, il y a un bouton parcourir, valider, et lorsque je choisi mon fichier, il y a bien le chemin pour y accéder.
bon, effectivement, le chemin du fichier n’apparait pas dans jmeter. mais meme si je lui fait passer après, je ne peux plus avancer dans ma page internet, je suis toujours coincé avec mon erreur. et si j’actualise la page, cela rajoute juste une ligne a jmeter toujours sans le chemin. n’y a t-il pas un moyen de euh, ‘mettre a jour’ la page internet à partir des info que j’ai rajouté a jmeter?
merci d’avoir répondu si vite en tout cas
Bonjour,
Il y a trois étapes : d’abord enregistrer ton scénario dans Jmeter (tu ne travailles qu’avec ton navigateur sauf pour lancer et arrêter le proxy), puis tu fais l’affinage du scénario (c’est à ce moment là qu’il faut bien préciser à JMeter le chemin exacte sur la machine jmeter du fichier à uploader, le tout en modifiant l’échantillon Requête HTTP correspondant à l’envoi du formulaire) et la troisième étant le test de charges avec JMeter.
Pour les prochaines questions et la suite, si tu peux essayer de passer par le Groupe JMeter en français, cela permet un meilleur suivi et tracabilité des messages pour les internautes. Merci
A+
Milamber