JMeter – Test de charge sur un webservice (SOAP)

 

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.

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

Ajout du sampler WebService SOAP

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.

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 tutoriel 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 récepteur View Results Tree.

Résultats du tir

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

./

Flattr this!

3 commentaires

  1. test dit :

    Très bon site!

  2. Nabil dit :

    très intéressant!

    Merci pour ce bel article.

  3. Kahya dit :

    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 🙂