NOUVELLE VERSION de ce tutoriel ici.
JMeter permet de faire des tirs de charge sur des webservices via SOAP. Je vous propose une petite démonstration.
Pour ce test de charge (simple) sur un webservice, il faut un webservice… pour ma part, j’ai suivi ce tutoriel du site developerWorks d’IBM pour avoir un webservice tout simple de type « hello world ».
Develop and execute WS-BPEL V2.0 business processes using the Eclipse BPEL plug-in
Il y a un pré-requis à remplir au niveau de JMeter pour tester un webservice utilisant SOAP, en effet, JMeter a besoin de deux fichiers JAR : mail.jar et activation.jar. Ils sont téléchargeables ici sur le site de SUN.
Les deux fichiers jars doivent être déposés dans le répertoire JMETER_HOME/lib.
Passons maintenant à JMeter et la préparation du scénario de tir de charge.
L’aspect fonctionnel du tir est volontairement absent de ce tutoriel afin de rester focalisé sur la partie « webservice » / SOAP… Je vous renvoie vers mes autres tutoriels pour mieux comprendre qu’il faut identifier le scénario fonctionnel avant de toucher à JMeter.
Sur JMeter, on commence bien entendu par la création du Thread Group.
Ensuite on passe à l’ajout de l’échantillon WebService (SOAP) Request, qui va nous servir pour la requête Soap vers le webservice qui a été ‘développé’ dans le tutoriel d’IBM.
On termine par l’ajout des récepteurs de résultats (Listeners). Ici, j’ai ajouté un Summary Report ainsi qu’un View Results Tree.
Pour revenir au webservice d’exemple, le voici affiché via un navigateur. On note l’URL d’accès « http://localhost:8080/ode/processes/HelloWorld » et on ajoute « ?wdsl » à cette URL pour avoir le service de découverte.
Dans JMeter, on prend le sampler du WebService, et dans le champ WSDL URL on place l’URL de découverte ci-dessus.
Puis, on clique sur le bouton Load WSDL afin de remplir automatiquement les champs de paramétrage du web service.
Il faut maintenant remplir le champ « Soap/XML-RPC Data » dans le Sampler. Pour cela, nous allons nous aider du Web Services Explorer des outils BPEL de Eclipse (cf tutoriel IBM).
En allant naviguer sur le webservice, on clique le lien « process » afin d’invoquer son exécution.
Le lancement de son exécution nous invite à saisir le paramètre d’entrée.
Ensuite, afin de voir le code SOAP pour l’invocation du webservice, il suffit de cliquer sur le bouton Source situé en haut à droite.
Ceci nous affiche un code XML correspondant à l’enveloppe SOAP.
Il faut faire plusieurs copier/coller pour remplir le champ Soap/XML-RPC Data dans JMeter.
On prendra également la peine de cocher la case « Read SOAP Response » afin de pouvoir capter le retour de l’appel au WebService.
On complète le scénario JMeter par la modification du paramétrage du Thread Group. Ici, un unique thread (user) qui lancera 10 fois l’appel.
Et hop, on lance le tir.
Les réponses s’affichent dans l’onglet Response data du récepteur View Results Tree.
L’exploitation des résultats suit la même logique qu’un tir de charge « web ». cf les autres tuto sur Jmeter.
On notera que JMeter utilise l’implémentation Apache SOAP (et non Axis) pour lancer ses appels WS. Il semblerait que Apache SOAP soit moins performants en termes de temps de réponses qu’Axis. (cf cette anomalie dans le bugzilla d’Apache Jmeter).
Par ailleurs, il est tout à fait possible de faire des tests de charge sur des webservices en passant par le HTTP Request comme on le ferait pour un site Web avec des requêtes http. On évite ainsi le temps d’analyse du fichier XML, etc. par JMeter pendant le tir (et donc de la consommation CPU excessive du poste de tir).
./
Très bon site!
très intéressant!
Merci pour ce bel article.
Bonjour,
J’ai 2 questions:
pour executer ma requête j’ai besoin de joindre un fichier .pdf, comment faire? Est-ce que l’élément « Requete SOAP/XML-RPC » sert à celà?
Pour acceder à mon wsdl j’ai besoin d’un certificat (que j’ai) et d’indiquer un user/password, comment faire?
Merci 🙂