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.

Ajout 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.

Ajout du sampler WebService SOAP

On termine par l’ajout des « écouteurs » de résultats (Listeners). Ici, j’ai ajouté un Summary Report, ainsi qu’un View Results Tree.

Ajout des listerners

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.

URL du WebService

Dans JMeter, on prend le sampler du WebService, et dans le champ WSDL URL, on place l’URL de découverte ci-dessus.

Chargement du WS via WSDL

Puis, on clique sur le bouton Load WSDL afin de remplir automatiquement les champs de paramétrage du web service.

Chargement du WS via WSDL

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.

Remplissage

Le lancement de son exécution nous invite à saisir le paramètre d’entrée.

Lancement de son exécution

Ensuite, afin de voir le code SOAP pour l’invocation du webservice, il suffit de cliquer sur le bouton Source situé en haut à droite.

Source du code

Ceci nous affiche un code XML correspondant à l’enveloppe SOAP.

Code XML

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.

Remplissage du champ Soap/XML-RPC Data

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.

Exécution 10 fois avec un seul thread

Et hop, on lance le tir.

Les réponses s’affichent dans l’onglet Response data du Listener View Results Tree.

Résultats du tir

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).

./

Un commentaire pour “JMeter – Test de charges sur un webservice (SOAP)”

  1. test dit :

    Très bon site!

Laisser un commentaire