{"id":978,"date":"2011-09-24T21:52:40","date_gmt":"2011-09-24T21:52:40","guid":{"rendered":"http:\/\/blog.milamberspace.net\/?page_id=978"},"modified":"2012-09-28T07:00:48","modified_gmt":"2012-09-28T06:00:48","slug":"jmeter-scenario-de-test-dun-webservice-soap","status":"publish","type":"page","link":"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-scenario-de-test-dun-webservice-soap","title":{"rendered":"JMeter &#8211; Sc\u00e9nario de test d&rsquo;un webservice SOAP"},"content":{"rendered":"<p>Cet article est la &lsquo;version 2&rsquo; de ce <a title=\"JMeter \u2013 Test de charge sur un webservice (SOAP)\" href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-test-de-charges-sur-un-webservice-soap\">premier tutoriel<\/a> sur la r\u00e9alisation d&rsquo;un sc\u00e9nario de test d&rsquo;un webservice avec JMeter, qui date du mai 2008 (le temps passe vite&#8230;).<\/p>\n<p>Dans la premi\u00e8re version de l&rsquo;article, nous en \u00e9tions \u00e0 la version 2.3.1 de JMeter. Pour cette &lsquo;version 2&rsquo;, on passe directement \u00e0 la future version 2.5.1. D&rsquo;une part, maintenant l&rsquo;interface graphique de JMeter sur les WebServices est traduite en fran\u00e7ais, et d&rsquo;autre part un certain nombre d&rsquo;am\u00e9liorations graphiques et de convivialit\u00e9 ont \u00e9t\u00e9 apport\u00e9es sur la derni\u00e8re version de JMeter.<\/p>\n<p>JMeter permet de faire des tests de charge sur des webservices via SOAP (avec le protocole Version 1.1). La suite vous propose une petite d\u00e9monstration.<\/p>\n<p>Pour ce test de charge (ici simple) sur un webservice, il faut un &#8230;webservice\u2026 pour ma part, j\u2019ai suivi ce tutoriel du site developerWorks d\u2019IBM pour avoir un webservice tout simple de type \u00ab\u00a0hello world\u00a0\u00bb : <a href=\"http:\/\/www.ibm.com\/developerworks\/opensource\/library\/os-eclipse-bpel2.0\/\">Develop and execute WS-BPEL V2.0 business processes using the Eclipse BPEL plug-in<\/a><\/p>\n<p>Passons maintenant \u00e0 JMeter et la pr\u00e9paration du sc\u00e9nario de tir de charge.<\/p>\n<p>L\u2019aspect fonctionnel du tir est volontairement absent de ce tutoriel afin de rester focalis\u00e9 sur la partie \u00ab\u00a0webservice\u00a0\u00bb \/ SOAP. Je vous renvoie vers <a title=\"Tutoriels JMeter\" href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\">mes autres tutoriels<\/a> pour voir cet aspect.<\/p>\n<p>Sur JMeter, on commence bien entendu par la cr\u00e9ation du <strong>Groupe d&rsquo;unit\u00e9s<\/strong>.<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ajout du Groupe d'unit\u00e9s dans l'arbre JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_029.png\" alt=\"\" width=\"858\" height=\"135\" \/><\/p>\n<p>Ensuite on passe directement \u00e0 l\u2019ajout de la <strong>Requ\u00eate WebService (SOAP)<\/strong>, qui va nous servir pour faire la requ\u00eate SOAP vers le webservice qui a \u00e9t\u00e9 \u2018d\u00e9velopp\u00e9e\u2019 dans le tutoriel d\u2019IBM.<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ajout de la requ\u00eate SOAP dans son arbre JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_030.png\" alt=\"\" width=\"883\" height=\"576\" \/><\/p>\n<p>On termine par l\u2019ajout des r\u00e9cepteurs de r\u00e9sultats. Ici, j\u2019ai ajout\u00e9 un <strong>Rapport consolid\u00e9<\/strong> ainsi qu\u2019un <strong>Arbre de r\u00e9sultats<\/strong> (qui est particuli\u00e8rement utile pour le d\u00e9bogage).<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Ajout des r\u00e9cepteurs dans JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_031.png\" alt=\"\" width=\"482\" height=\"180\" \/><\/p>\n<p>Pour revenir au webservice d\u2019exemple, on va utiliser son descripteur WSDL pour obtenir les services qu&rsquo;il propose. Pour cela on utilise l\u2019URL d\u2019acc\u00e8s <strong>http:\/\/localhost:8080\/ode\/processes\/HelloWorld<\/strong> sur laquelle, on ajoute \u00ab\u00a0<strong>?wdsl<\/strong> \u00bb \u00e0 cette URL pour avoir le service de d\u00e9couverte.<\/p>\n<p>Dans JMeter, on s\u00e9lectionne la requ\u00eate WebService, et dans le champ <strong>WSDL URL<\/strong> on saisit l\u2019URL de d\u00e9couverte ci-dessus.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Saisie du WSDL dans JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_032.png\" alt=\"\" width=\"920\" height=\"290\" \/><\/p>\n<p>Puis, on clique sur le bouton <strong>Charger WSDL<\/strong> afin de remplir automatiquement les champs de param\u00e9trage du web service.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Confguration automatique de la m\u00e9thode webservice avec JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_033.png\" alt=\"\" width=\"921\" height=\"351\" \/><\/p>\n<p>Ensuite, la liste des m\u00e9thodes du webservice est affich\u00e9e dans la liste d\u00e9roulante. On choisit la m\u00e9thode \u00e0 utiliser, puis on clique sur le bouton <strong>Configurer<\/strong>. Ce bouton va pr\u00e9-remplir les champs de la requ\u00eate WebService.<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"JMeter Requ\u00eate WebService remplie\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_034.png\" alt=\"\" width=\"912\" height=\"322\" \/><\/p>\n<p>Il faut maintenant remplir le champ <strong>Donn\u00e9es Soap\/XML-RPC<\/strong> dans l&rsquo;\u00e9chantillon. Pour cela, nous allons nous aider du logiciel <a href=\"http:\/\/www.soapui.org\/\">SoapUI<\/a>.<\/p>\n<p>On cr\u00e9e un nouveau projet, dans lequel, on remplit le champ <strong>Initial WSDL\/WADL<\/strong> par l&rsquo;URL du descripteur de d\u00e9ploiement d\u00e9j\u00e0 indiqu\u00e9 \u00e0 JMeter ci-dessus.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"SoapUI nouveau projet\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_035.png\" alt=\"\" width=\"671\" height=\"308\" \/><\/p>\n<p>Dans l&rsquo;explorateur de webservice de <strong>SoapUI<\/strong>, on choisit le service <strong>HelloWorldSOAP11Binding<\/strong> (la version 1.1 du SOAP, JMeter ne connait pas la version 1.2)<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"SoapUI\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_036.png\" alt=\"\" width=\"256\" height=\"114\" \/><\/p>\n<p>Apr\u00e8s avoir double-cliqu\u00e9 sur <strong>Request 1<\/strong> dans la fen\u00eatre de requ\u00eate, on a un mod\u00e8le de message SOAP comme le montre la capture ci-dessous. On donne une valeur pour l&rsquo;entr\u00e9e du service web, puis on s\u00e9lectionne le message SOAP et on le copie dans son presse-papiers <em>(le fameux Ctrl-C)<\/em><\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"SoapUI Requ\u00eate\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_037.png\" alt=\"\" width=\"711\" height=\"204\" \/><\/p>\n<p>On revient dans JMeter, au niveau de la <strong>Requ\u00eate WebService (SOAP)<\/strong> afin de faire le coller (Ctrl-V) dans le champ <strong>Donn\u00e9es Soap\/XML-RPC<\/strong>.<\/p>\n<p>On prendra \u00e9galement la peine de cocher la case <strong>Lire la r\u00e9ponse SOAP<\/strong> afin de pouvoir capter le retour de l\u2019appel au WebService. (Si ce n&rsquo;est pas coch\u00e9, il n&rsquo;est pas possible de faire par exemple des assertions de r\u00e9ponses ou d&rsquo;utiliser un extracteur d&rsquo;expression r\u00e9guli\u00e8re pour r\u00e9cup\u00e9rer des valeurs)<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Coller de la requ\u00eate SOAP dans l'\u00e9chantillon JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_038.png\" alt=\"\" width=\"916\" height=\"599\" \/><\/p>\n<p>On compl\u00e8te le sc\u00e9nario JMeter par la modification du param\u00e9trage du <strong>Groupe d&rsquo;unit\u00e9s<\/strong>. Ici, une unique unit\u00e9 (utilisateur virtuel) qui lancera 10 fois l\u2019appel.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Groupe d'unit\u00e9s JMeter\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_039.png\" alt=\"\" width=\"457\" height=\"266\" \/><\/p>\n<p>Et hop, on lance le tir.<\/p>\n<p>Les r\u00e9ponses s\u2019affichent dans l\u2019onglet <strong>Donn\u00e9es de r\u00e9ponses<\/strong> du r\u00e9cepteur <strong>Arbre de r\u00e9sultats<\/strong>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Arbre de r\u00e9sultats avec r\u00e9ponse de WebService\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_040.png\" alt=\"\" width=\"771\" height=\"515\" \/><\/p>\n<p>L\u2019exploitation des r\u00e9sultats suit la m\u00eame logique qu\u2019un tir de charge \u00ab\u00a0web\u00a0\u00bb. cf les <a title=\"Tutoriels JMeter\" href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\">autres tuto sur Jmeter<\/a>.<\/p>\n<p>Et voil\u00e0 pour ce petit tutoriel WebService.<\/p>\n<p>En compl\u00e9ment, noter qu&rsquo;il est tout \u00e0 fait possible de faire des tests de charge sur des webservices en utilisant par la <strong>Requ\u00eate HTTP<\/strong> classique comme on le ferait pour un site Web. On \u00e9vite ainsi le temps d\u2019analyse du fichier XML, etc. par JMeter pendant le tir (et donc de la consommation CPU excessive du poste de tir).<\/p>\n<p>L&rsquo;avantage aussi d&rsquo;utiliser une requ\u00eate HTTP classique c&rsquo;est que le serveur Proxy de JMeter peut \u00eatre utilis\u00e9 pour cr\u00e9er automatiquement les requ\u00eates HTTP\/SOAP.<\/p>\n<p>Ci-dessous, le r\u00e9sultat d&rsquo;une cr\u00e9ation automatique par le serveur Proxy d&rsquo;une requ\u00eate de webservice \u00ab\u00a0cach\u00e9e\u00a0\u00bb dans une requ\u00eate HTTP.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Requ\u00eate HTTP pour WebService\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_041.png\" alt=\"\" width=\"941\" height=\"471\" \/><\/p>\n<p>On voit ci-dessus que le message SOAP est sur 1 ligne et dans les param\u00e8tres de la requ\u00eate comme une valeur (sans nom).<\/p>\n<p>On remarquera \u00e9galement en fils de la requ\u00eate HTTP, le <strong>Gestionnaire d&rsquo;ent\u00eates HTTP<\/strong>, qui contient un champ SOAPAction\u00a0 qui indique le service web \u00e0 appeler.<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"Gestionnaire d'ent\u00eates JMeter pour WebService\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_042.png\" alt=\"\" width=\"876\" height=\"159\" \/><\/p>\n<p>Voil\u00e0, ensuite c&rsquo;est la m\u00eame chose pour le lancement du tir. Les r\u00e9sultats se pr\u00e9sentent exactement de la m\u00eame fa\u00e7on qu&rsquo;avec une requ\u00eate WebService.<\/p>\n<p style=\"text-align: center;\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" title=\"R\u00e9sultats test Webservice\" src=\"\/wp-content\/images\/jmeter-38-webservices-soap\/jmeter-webservices-soap_043.png\" alt=\"\" width=\"803\" height=\"375\" \/><\/p>\n<p>Bon courage dans vos tests de services web\u00a0!<br \/>\n.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article est la &lsquo;version 2&rsquo; de ce premier tutoriel sur la r\u00e9alisation d&rsquo;un sc\u00e9nario de test d&rsquo;un webservice avec JMeter, qui date du mai 2008 (le temps passe vite&#8230;). Dans la premi\u00e8re version de l&rsquo;article, nous en \u00e9tions \u00e0 la version 2.3.1 de JMeter. Pour cette &lsquo;version 2&rsquo;, on passe directement \u00e0 la future &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-scenario-de-test-dun-webservice-soap\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter &#8211; Sc\u00e9nario de test d&rsquo;un webservice SOAP<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":85,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-978","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/comments?post=978"}],"version-history":[{"count":8,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/978\/revisions"}],"predecessor-version":[{"id":1213,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/978\/revisions\/1213"}],"up":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/85"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}