JMeter – Test de charges sur un webservice (SOAP)
JMeter permet de faire des tirs de charges 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 tutorial 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 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 charges.
L’aspect fonctionnel du tir est volontairement absent de ce tutorial afin de rester focalisé sur la partie « webservice » / SOAP… Je vous renvoie vers mes autres tutorials 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 du Sampler WebService (SOAP) Request, qui va nous servir pour la requête Soap vers le webservice qui a été ‘développé’ dans le tutorial d’IBM.

On termine par l’ajout des « écouteurs » 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 tutorial 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 Listener View Results Tree.

L’exploitation des résultats suit la même logique qu’un tir de charges « 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 charges sur des webservices en passant par le HTTP Request comme on le ferait pour un site Web. 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).
./
26 juillet 2008 à 17:41
Très bon site!