{"id":75,"date":"2008-05-18T17:47:00","date_gmt":"2008-05-18T17:47:00","guid":{"rendered":"http:\/\/blog.milamberspace.net\/index.php\/jmeter-\u2013-test-de-charges-sur-un-webservice-soap"},"modified":"2012-09-28T07:02:18","modified_gmt":"2012-09-28T06:02:18","slug":"jmeter-test-de-charges-sur-un-webservice-soap","status":"publish","type":"page","link":"https:\/\/blog.milamberspace.net\/index.php\/archives\/jmeter-test-de-charges-sur-un-webservice-soap","title":{"rendered":"JMeter &#8211; Test de charge sur un webservice (SOAP)"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><strong><a title=\"JMeter \u2013 Sc\u00e9nario de test d\u2019un webservice SOAP\" href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-scenario-de-test-dun-webservice-soap\">NOUVELLE VERSION de ce tutoriel ici.<\/a><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>JMeter permet de faire des tirs de charge sur des webservices via SOAP. Je vous propose une petite d\u00e9monstration.<\/p>\n<p>Pour ce test de charge (simple) sur un webservice, il faut un webservice&#8230; pour ma part, j&rsquo;ai suivi ce tutoriel du site developerWorks d&rsquo;IBM pour avoir un webservice tout simple de type \u00ab\u00a0hello world\u00a0\u00bb.<br \/>\n<a title=\"Develop and execute WS-BPEL V2.0 business processes using the Eclipse BPEL plug-in \" href=\"http:\/\/www.ibm.com\/developerworks\/opensource\/library\/os-eclipse-bpel2.0\/\" target=\"_blank\">Develop and execute WS-BPEL V2.0 business processes using the Eclipse BPEL plug-in<\/a><\/p>\n<p>Il y a un pr\u00e9-requis \u00e0 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\u00e9l\u00e9chargeables <a href=\"http:\/\/java.sun.com\/products\/javamail\/downloads\/index.html\" target=\"_blank\">ici<\/a> sur le site de SUN.<\/p>\n<p>Les deux fichiers jars doivent \u00eatre d\u00e9pos\u00e9s dans le r\u00e9pertoire <em>JMETER_HOME\/lib<\/em>.<\/p>\n<p>Passons maintenant \u00e0 JMeter et la pr\u00e9paration du sc\u00e9nario de tir de charge.<\/p>\n<p>L&rsquo;aspect fonctionnel du tir est volontairement absent de ce tutoriel afin de rester focalis\u00e9 sur la partie \u00ab\u00a0webservice\u00a0\u00bb \/ SOAP&#8230; Je vous renvoie vers mes <a href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\">autres tutoriels<\/a> pour mieux comprendre qu&rsquo;il faut identifier le sc\u00e9nario fonctionnel avant de toucher \u00e0 JMeter.<\/p>\n<p>Sur JMeter, on commence bien entendu par la cr\u00e9ation du <strong>Thread Group<\/strong>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/01-jmeter-webservice-add-tg.png\" alt=\"Ajout du Thread Group\" width=\"521\" height=\"160\" border=\"1\" \/><\/p>\n<p>Ensuite on passe \u00e0 l&rsquo;ajout de l&rsquo;\u00e9chantillon <strong>WebService (SOAP) Request<\/strong>, qui va nous servir pour la requ\u00eate Soap vers le webservice qui a \u00e9t\u00e9 &lsquo;d\u00e9velopp\u00e9&rsquo; dans le tutoriel d&rsquo;IBM.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/02-jmeter-webservice-add-soap.png\" alt=\"Ajout du sampler WebService SOAP\" width=\"650\" height=\"288\" border=\"1\" \/><\/p>\n<p>On termine par l&rsquo;ajout des r\u00e9cepteurs de r\u00e9sultats (Listeners). Ici, j&rsquo;ai ajout\u00e9 un <strong>Summary Report<\/strong> ainsi qu&rsquo;un <strong>View Results Tree<\/strong>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/03-jmeter-webservice-test-plan.png\" alt=\"Ajout des listerners\" width=\"386\" height=\"145\" border=\"1\" \/><\/p>\n<p>Pour revenir au webservice d&rsquo;exemple, le voici affich\u00e9 via un navigateur. On note l&rsquo;URL d&rsquo;acc\u00e8s \u00ab\u00a0<strong>http:\/\/localhost:8080\/ode\/processes\/HelloWorld<\/strong> \u00bb et on ajoute \u00ab\u00a0<strong>?wdsl <\/strong>\u00bb \u00e0 cette URL pour avoir le service de d\u00e9couverte.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/04-jmeter-webservice-ode1.png\" alt=\"URL du WebService\" width=\"663\" height=\"526\" border=\"1\" \/><\/p>\n<p>Dans JMeter, on prend le sampler du WebService, et dans le champ<strong> WSDL URL<\/strong> on place l&rsquo;URL de d\u00e9couverte ci-dessus.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/05-jmeter-webservice-load-wsdl.png\" alt=\"Chargement du WS via WSDL\" width=\"716\" height=\"384\" border=\"1\" \/><\/p>\n<p>Puis, on clique sur le bouton <strong>Load 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\" src=\"\/wp-content\/images\/jmeter07-img\/06-jmeter-webservice-configure.png\" alt=\"Chargement du WS via WSDL\" width=\"553\" height=\"378\" border=\"1\" \/><\/p>\n<p>Il faut maintenant remplir le champ \u00ab\u00a0<strong>Soap\/XML-RPC Data<\/strong> \u00bb dans le Sampler. Pour cela, nous allons nous aider du <strong>Web Services Explorer<\/strong> des outils BPEL de Eclipse (cf tutoriel IBM).<\/p>\n<p>En allant naviguer sur le webservice, on clique le lien \u00ab\u00a0process\u00a0\u00bb afin d&rsquo;invoquer son ex\u00e9cution.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/07-jmeter-webservice.png\" alt=\"Remplissage\" width=\"669\" height=\"427\" border=\"1\" \/><\/p>\n<p>Le lancement de son ex\u00e9cution nous invite \u00e0 saisir le param\u00e8tre d&rsquo;entr\u00e9e.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/08-jmeter-webservice.png\" alt=\"Lancement de son ex\u00e9cution\" width=\"664\" height=\"406\" border=\"1\" \/><\/p>\n<p>Ensuite, afin de voir le code SOAP pour l&rsquo;invocation du webservice, il suffit de cliquer sur le bouton Source situ\u00e9 en haut \u00e0 droite.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/09-jmeter-webservice.png\" alt=\"Source du code\" width=\"602\" height=\"328\" border=\"1\" \/><\/p>\n<p>Ceci nous affiche un code XML correspondant \u00e0 l&rsquo;enveloppe SOAP.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/10-jmeter-webservice.png\" alt=\"Code XML\" width=\"434\" height=\"921\" border=\"1\" \/><\/p>\n<p>Il faut faire plusieurs copier\/coller pour remplir le champ <strong>Soap\/XML-RPC Data<\/strong> dans JMeter.<\/p>\n<p>On prendra \u00e9galement la peine de cocher la case \u00ab\u00a0<strong>Read SOAP Response<\/strong> \u00bb afin de pouvoir capter le retour de l&rsquo;appel au WebService.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/11-jmeter-webservice.png\" alt=\"Remplissage du champ Soap\/XML-RPC Data\" width=\"641\" height=\"853\" border=\"1\" \/><\/p>\n<p>On compl\u00e8te le sc\u00e9nario JMeter par la modification du param\u00e9trage du <strong>Thread Group<\/strong>. Ici, un unique thread (user) qui lancera 10 fois l&rsquo;appel.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/12-jmeter-webservice.png\" alt=\"Ex\u00e9cution 10 fois avec un seul thread\" width=\"428\" height=\"261\" border=\"1\" \/><\/p>\n<p>Et hop, on lance le tir.<\/p>\n<p>Les r\u00e9ponses s&rsquo;affichent dans l&rsquo;onglet <strong>Response<\/strong> <strong>data<\/strong> du r\u00e9cepteur <strong>View Results Tree<\/strong>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/images\/jmeter07-img\/13-jmeter-webservice.png\" alt=\"R\u00e9sultats du tir\" width=\"789\" height=\"301\" border=\"1\" \/><\/p>\n<p>L&rsquo;exploitation des r\u00e9sultats suit la m\u00eame logique qu&rsquo;un tir de charge \u00ab\u00a0web\u00a0\u00bb. cf <a href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\">les autres tuto sur Jmeter<\/a>.<\/p>\n<p>On notera que JMeter utilise l&rsquo;impl\u00e9mentation Apache SOAP (et non Axis) pour lancer ses appels WS. Il semblerait que Apache SOAP soit moins performants en termes de temps de r\u00e9ponses qu&rsquo;Axis. <em>(cf <a href=\"https:\/\/issues.apache.org\/bugzilla\/show_bug.cgi?id=40757\" target=\"_blank\">cette anomalie<\/a> dans le bugzilla d&rsquo;Apache Jmeter).<\/em><\/p>\n<p>Par ailleurs, il est tout \u00e0 fait possible de faire des tests de charge sur des webservices en passant par le<strong> HTTP Request<\/strong> comme on le ferait pour un site Web avec des requ\u00eates http. On \u00e9vite ainsi le temps d&rsquo;analyse du fichier XML, etc. par JMeter pendant le tir (et donc de la consommation CPU excessive du poste de tir).<\/p>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; NOUVELLE VERSION de ce tutoriel ici. &nbsp; JMeter permet de faire des tirs de charge sur des webservices via SOAP. Je vous propose une petite d\u00e9monstration. Pour ce test de charge (simple) sur un webservice, il faut un webservice&#8230; pour ma part, j&rsquo;ai suivi ce tutoriel du site developerWorks d&rsquo;IBM pour avoir un webservice &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/archives\/jmeter-test-de-charges-sur-un-webservice-soap\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter &#8211; Test de charge sur un webservice (SOAP)<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":985,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-75","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/75","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=75"}],"version-history":[{"count":10,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/75\/revisions"}],"predecessor-version":[{"id":1222,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/75\/revisions\/1222"}],"up":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/985"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}