Imaginez que vous avez la charge de tester un logiciel. Un service primordial comme l'authentification est toujours en cours de développement. Vous êtes donc bloqué pour tester des scénarios qui impliquent l'authentification.
SoapUI offre la possibilité de simuler un service à partir de son WSDL. En quelques clics, vous pouvez avoir un service qui tourne sur un serveur interne de SoapUI et qui simule le fonctionnement du vrai service.
Allons tester cette magie, voulez-vous ? :)
Nous allons créer un nouveau projet à partir d'un simple WSDL qui accepte en entrée un prénom et affiche Bonjour + prénom.
Copiez ce WSDL et enregistrez-le sous bonjour.wsdl
<definitions name = "BonjourService"
targetNamespace = "http://www.exemples.com/wsdl/BonjourService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.exemples.com/wsdl/BonjourService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "AfficherBonjourRequest">
<part name = "prenom" type = "xsd:string"/>
</message>
<message name = "AfficherBonjourResponse">
<part name = "bonjour" type = "xsd:string"/>
</message>
<portType name = "Bonjour_PortType">
<operation name = "afficherBonjour">
<input message = "tns:AfficherBonjourRequest"/>
<output message = "tns:AfficherBonjourResponse"/>
</operation>
</portType>
<binding name = "Bonjour_Binding" type = "tns:Bonjour_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "afficherBonjour">
<soap:operation soapAction = "afficherBonjour"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:exemples:bonjourservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:exemples:bonjourservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Bonjour_Service">
<port binding = "tns:Bonjour_Binding" name = "Bonjour_Port">
<soap:address
location = "http://www.exemples.com/AfficherBonjour/" />
</port>
</service>
</definitions>
Créez pour l'occasion un nouveau projet et appelez-le Bonjour. À l'étape où on vous demande un WSDL, choisissez celui que vous avez enregistré dans votre ordinateur puis validez.
Faites un clic droit sur bonjour_binding puis choisissez Generate SOAP Mock Service.
Vous tombez sur le générateur de mocks qui vous proposera de choisir les opérations à inclure, dans ce cas il n'y en a qu'une. Changez par contre Path pour le simplifier, mettez bonjour tout simplement à la place. Validez.
On vous demandera ensuite de choisir le nom à donner à ce mock, entrez "MockBonjour".
Créez une propriété "name" au niveau du projet. Pour ce faire, cliquez sur le projet et ajoutez la propriété en bas dans le panneau affiché.
Revenez dans le mock créé et double cliquez sur Response 1. Celle-ci représente la réponse que le mock va simuler quand vous l'invoquerez. Nous allons mettre en réponse la propriété name que nous avons fixé plus haut. Fermez ensuite cette fenêtre.
Doublez cliquez sur MockBonjour à gauche afin d'afficher la fenêtre de celui-ci. Celle-ci vous permet de lancer le mock dans le serveur interne de SoapUI. Celui-ci sera alors disponible exactement comme n'importe quel service. Cliquez sur le bouton play pour le lancer.
Vous avez en haut à droite running on port 8088 qui vous indique le port de votre service. Afin de tester que celui-ci marche bel et bien, rendez-vous dans votre navigateur à l'adresse = http://localhost:8088/, vous devriez avoir ceci :
SoapUI vous indique que vous avez un mock qui fonctionne et vous fournit son adresse de WSDL.
Vous allez maintenant faire appel à ce service depuis la requête qu'on avait au départ. Double cliquez sur Request 1 et remplacez là aussi le contenu de la balise < prenom > par la propriété que nous avons définie (vous savez faire maintenant :p).
Remplacez l'adresse du service par celui qu'on vient de créer : http://localhost:8088/bonjour
Il ne vous reste plus qu'à appuyer sur le bouton play pour lancer le test.
Vous verrez alors par magie apparaître le résultat attendu, à savoir le prénom que vous avez fixé dans la propriété name. Changez ce prénom et testez encore pour vérifier. Si vous préférez qu'il vous affiche "Bonjour Robert", il suffit d'éditer Response 1 en ajoutant le mot "bonjour" avant la propriété.
Votre requête vient d'interroger votre mock qui s'est comporté comme un vrai service et a répondu avec un message SOAP valide.
Vous pouvez grâce à cet outil simuler tout une ribambelle de services avant même de commencer à les développer. Vous pouvez aussi tester le service que vous comptez développer et l'intégrer dans un système déjà existant afin de vérifier qu'il s'intègre correctement, avant d'écrire la logique.