Tests de charge d'un web service Partie 1 : Apache JMeter

Dans le cycle de développement d’un Web service, après les phases de conception et de réalisation, se pose bien souvent la question de la robustesse.  Pour savoir si un Web service est à la fois performant et endurant il faut réaliser ce que l’on appelle des tests de charge.

Il existe de nombreux outils sur le marché permettant de réaliser des tests de charge, le plus connu étant LoadRunner de Mercury. Dans cette série d’articles en deux parties, nous nous pencherons sur deux d’entre eux, qui ont le bon goût d’être des outils open sources : Apache JMeter et soapUI.

Apache JMeter, qu’est-ce que c’est ?

Apache JMeter peut être téléchargé à l’adresse suivante : http://jmeter.apache.org/

Comme précisé en préambule, Apache JMeter est outil open source développé en Java pour la réalisation et la mesure de la performance de tests de charge. Au fil des versions, cet outil, initialement restreint aux tests d’application Web, a vu ses fonctionnalités s’enrichir. Aujourd’hui il peut être utilisé pour tester la performance d’une base de données (au travers de requêtes SQL), des serveurs FTP, LDAP etc.

Test de charge avec Apache JMeter

Scénario : Dans notre exemple nous allons tester la méthode « GetCitiesByCountry» du Web service de météo dont le endPoint est  « http://www.webservicex.com/globalweather.asmx ». Pour cela, nous allons créer 20 utilisateurs qui vont consommer ce Web service 1 fois chacun.

Comment construire le test ?

1) Lancer Apache JMeter en utilisant le fichier « /bin/ jmeter.bat » si vous êtes sur Windows.

Remarque : si vous êtes derrière un proxy, vous pouvez lancer JMeter en précisant les paramètres de proxy en utilisant les options :

-H [serveur proxy ou adresse IP]
-P [Port]
-u [username d’authentification]
-a [Mot de passe d’authentification]

Exemple : jmeter.bat -H 192.168.10.1 -P 8012 -u my_user_name -a my_password

Une fois lancé, vous arrivez sur la fenêtre d’accueil suivante :

fenêtre accueil Apache JMeter

Cette fenêtre contient deux éléments : un plan de test et un plan de travail.

Le plan de test est l’endroit central où sont créés les scripts de test. Il se divise en deux parties dont l’une contient deux check boxes. Dans le premier tableau, l’utilisateur peut définir des variables pouvant être utilisées dans toute autre partie du scénario. Cela ressemble aux variables de contexte définies dans Talend. Le deuxième tableau permet à l’utilisateur de charger des fichiers jar pouvant être utilisé pour, par exemple, des connexions JDBC.

Enfin, les cases à cocher : Lorsque la première (« Lancer les groupes d’unités en série ») est cochée, JMeter lance les groupes d’utilisateurs un par un, auquel cas, tous les groupes d’utilisateurs sont lancés en même temps. La seconde (« Mode de test fonctionnel ») permet à JMeter d’enregistrer plus d’informations sur chaque requête (réponse complète et corps de la demande). Attention : cela a un coût sur les performances. Il est donc recommandé de l’utiliser avec parcimonie.

Le plan de travail est un espace de travail non sauvegardé.

2) Ajouter un groupe d’utilisateurs en sélectionnant le plan de test puis, bouton droit, Ajouter > Moteurs d’utilisateurs > Groupes d’unités

Ajout groupe utilisateur Apache JMeter

Entrez « 20 » pour le champ « Nombre d’unités » tel que nous l’avons défini dans notre scénario :

Nombre d'utilisateurs 20 Apache JMeter

Remarque : la durée de montée en charge indique à JMeter le délai total pour lancer tous les utilisateurs, en les répartissant. Exemple : si nous avions mis une durée de 5 sec pour 5 utilisateurs, JMeter aurait lancé 5 / 5 soit 1 utilisateur toute les secondes. Si ce nombre est à 0, tous les utilisateurs sont lancés en même temps.

Tout en sélectionnant le Groupe d’unités nouvellement créé, faites bouton droit, Ajouter > Echantillon > Requête WebService (SOAP)

Ajout échantillon Apache JMeter

Une nouvelle fenêtre s’ouvre :

Nouvelle fenêtre Apache JMeter

Remplissez les champs comme suit :

Champs à remplir Apache JMeter

Pour notre requête, nous avons choisi de lister les villes de France :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="http://www.webserviceX.NET">
    <soapenv:Header/>
    <soapenv:Body>
      <web:GetCitiesByCountry>
        <!--Optional:-->
        <web:CountryName>France</web:CountryName>
      </web:GetCitiesByCountry>
    </soapenv:Body>
</soapenv:Envelope>

 

3) Sélectionnez le « Groupe d’unités » puis, bouton droit > Ajouter > Récepteurs > Tableau de résultats. Cela permettra d’obtenir les métriques du test dans un tableau de résultats.

Obtenir les métriques du test dans un tableau de résultats

Comme vous pouvez le voir sur la capture ci-dessous, un nouvel élément est venu s’ajouter
sous « Groupe d’Unités » :

Apparition d'un nouvel élément sous Groupe d'unités

De la même façon, vous pouvez ajouter un graphique de résultats :

Ajout d'un graphique de résultats

De manière générale, les récepteurs permettent de récupérer et d’afficher les résultats du test une fois lancé.

4) Le scénario, avec les mesures, est maintenant fin prêt. Il ne reste plus qu’à lancer le test. Pour ceci, faire Lancer > Lancer ou appuyer sur le bouton vert :

bouton vert

5) Résultats du test

Le tableau de résultats liste les résultats du test de charge avec les principaux indicateurs : heure de début, temps d’exécution de la requête, le statut (ok/ko), la moyenne et l’écart-type.

Tableau de résultats de test sous Apache JMeter

Le graphique de résultats, quant à lui, représente ces mêmes infos sous cette forme :

Graphique de résultats Apache JMeter

Bien évidemment, il existe de nombreux autres « récepteurs » qui permettent de recueillir les résultats du test comme par exemple l’enregistrement sur fichier.

Enfin, il est possible de vider un récepteur de ses infos en utilisant la balayette située dans la barre des icônes.


 

La seconde partie, consacrée à SoapUI, sera publiée la semaine prochaine ! 

Madjid Djebbar

Comments are closed.