Tests fonctionnels de services web avec SOAP-UI¶
Le but de cette première série d'exercices est d'apprendre à inspecter et à invoquer un service web SOAP via l'outil SOAP-UI. Le TP insiste sur la découverte des standards WSDL et SOAP et sur l'outillage proposé par SOAP-UI pour réaliser des tests fonctionnels (simulation, test de performance, validation de messages SOAP…).
Buts pédagogiques: lecture d'un WSDL, lecture et écriture de messages SOAP, invoquer une opération d'un service web sans programmation, création de tests fonctionnels, simulation de services web à partir de sa description.
Téléchargement des codes des exercices
Les codes pour les exercices seront fournis par votre enseignant.
I. Exercice 1 - Inspecter et invoquer des services web¶
I-A. But¶
- Construire un projet SOAP-UI à partir de la description WSDL d'un service web.
- Invoquer certaines opérations.
I-B. Description¶
Le site de la National Oceanic and Atmospheric Administration's (NOAA) est un service du gouvernement des États-Unis qui fournit un accès à la base complète des conditions climatiques sur le sol américain. La NOAA fournit par le biais d'un service web des opérations permettant d'interroger cette base pour connaître, par exemple, le temps dans une région donnée. Dans cet exercice, nous nous intéressons à appeler des opérations pour afficher les conditions météorologiques sur la ville de Manhattan. Consultez cette page http://graphical.weather.gov/xml/ pour obtenir des informations sur le service web.
I-C. Étapes à suivre¶
- Avant d'utiliser l'outil SOAP-UI, nous souhaitons vérifier que le document WSDL du service web de la NOAA est disponible. Par ailleurs, cela nous permettra de visualiser ce document. Ouvrir une instance de votre navigateur préféré puis saisir l'URL suivante: http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl
- Examiner le document WSDL en identifiant clairement les opérations disponibles.
- Télécharger SOAP-UI à l'adresse suivante: http://www.soapui.org/ (onglet Download) en préférant la version compactée ZIP. SOAP-UI est un outil développé en Java. Par conséquent, faire attention à la version de votre machine virtuelle Java (32 bits ou 64 bits).
- Démarrer ensuite SOAP-UI.
- Construire un nouveau projet via le menu File -> New soapUI Project.
- Dans le champ
Project Name, saisir le nom du projetSOA-Labs1-NOAA, puis valider (laisser les autres paramètres par défaut). - Dans le champ
Initial WSDL/WADL, saisir la précédente adresse de la description du service web: http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl.

Création d'un nouveau projet SOAP-UI basé sur le WSDL de la NOAA
- Une fois le projet créé, SOAP-UI affiche toutes les opérations disponibles et crée un squelette de chaque requête.

Structure des opérations d'un projet SOAP-UI
- Nous pouvons dès à présent invoquer une opération de ce service web. Double-cliquer sur le nœud
Request 1de l'opérationLatLonListZipCode. Cette opération retourne des couples de valeurs Latitude/Longitude en fonction d'une liste de codes postaux américains. - Dans le corps de l'élément
zipCodeList, saisir la valeur10001qui correspond au code postal de la ville de New York puis soumettre le message SOAP. - Vérifier le résultat de la réponse, les valeurs Latitude/Longitude doivent être
40.7198/-73.993. - Invoquer l'opération
NDFDgenByDayqui retourne des prévisions météorologiques en fonction de la latitude, longitude, une date, une durée et un format de date. Utiliser les valeurs suivantes:latitude=40.7198;longitude=-73.993;startDate=YYYY-MM-DD(où YYYY est l'année, MM est le mois et DD est le jour. Il faut mettre une date postérieure à la date du jour);numDays=1,unit=metformat=24 hourly. - Vérifier le résultat de la réponse, vous devriez obtenir des informations concernant la prévision météorologique sur la ville de New York (température, type de temps…).
- Invoquer l'opération
NDFDgenByDayLatLonListqui retourne des informations météorologiques en fonction d'une liste de couples de valeurs latitude/longitude, une date, une durée et un format de date. Récupérer les informations météorologiques de la ville de New York (40.7198,-73.993) et de la municipalité de Beverly Hills (code zip:90210). Les éléments de la liste latitude/longitude sont séparés par une espace. - Vérifier de nouveau le résultat obtenu, vous devriez obtenir des informations concernant les prévisions météorologiques sur la ville de New York et sur la municipalité de Beverly Hills.
II. Exercice 2 - Construire une suite de tests simple (TestSuite)¶
II-A. But¶
- Construire une suite de tests.
- Définir des assertions pour vérifier le bon fonctionnement du service web.
II-B. Description¶
La création d'une suite de tests permet d'enchaîner un ensemble de cas de tests (TestCase). Un cas de test regroupe un ensemble d'étapes à réaliser. Cela peut correspondre par exemple à l'invocation d'une ou plusieurs opérations du service web. Cet exercice montre comment invoquer une opération et vérifier des assertions (contraintes qui doivent être vérifiées) à travers une suite de tests.
II-C. Étapes à suivre¶
- Cliquer droit sur le nœud du projet
SOA-Labs1-NOAApuis choisir New TestSuite. Saisir le nomSimpleTestSuitecomme nom de la suite de tests. - Pour ajouter un nouveau cas de test, nous allons réutiliser les valeurs liées aux précédentes invocations (voir exercice 1). Sélectionner la requête de l'opération
LatLonListZipCode, cliquer droit et faire Add to TestCase. - Une boîte de dialogue avec un composant à choix multiples est proposée. Choisir la valeur
Simple TestSuite -> Create new TestCasepuis valider. - Nommer le nouveau cas de test
LatLonListZipCode Test Casepuis valider. - Laisser les paramètres par défaut (voir figure ci-dessous).

Ajouter une requête à un cas de test
- Réitérer l'ajout d'un nouveau cas de test pour les opérations
NDFDgenByDayetNDFDgenByDayLatLonListen nommant respectivement les cas de testsNDFDgenByDay Test CaseetNDFDgenByDayLatLonList Test Case. Vous devriez obtenir le résultat suivant pour la suite de testSimpleTestSuite.

Suite de tests avec trois cas de tests
- Les trois cas de tests sont définis dans la suite de tests. Exécuter ces cas de tests (flèche verte en haut à gauche) et vous devriez réussir les invocations des opérations.
Exécution de la suite de tests
- À ce stade, seule l'exécution de l'opération est vérifiée. Une assertion peut être associée au résultat de manière à garantir que le test a réussi ou pas. Par défaut, seule l'assertion SOAP Response est définie. Cette assertion vérifie qu'un message SOAP est correctement retourné au client SOAP-UI. Double-cliquer sur la requête du cas de test
LatLonListZipCode Test Casepour ouvrir le contenu de la requête SOAP.

- Cliquer sur le bouton Assertions situé en bas à gauche de la fenêtre requête ouverte précédemment (voir figure ci-dessous).

- Ajouter une assertion Contains permettant de vérifier si une valeur donnée est présente dans la réponse.

- Une boîte de dialogue Contains Assertion s'ouvre. Dans le champ Content indiquer la valeur
40.7198,-73.993.

- Au niveau du message SOAP de la requête, changer la valeur contenue dans le corps de l'élément
zipCodeListpar la valeur20001. - Exécuter de nouveau la suite de tests. Le cas de test
LastLonListZipCode Test Casene doit pas passer. L'assertion sur le contenu n'est pas correcte puisque la valeur40.7198,-73.993n'apparaît pas dans la réponse. - Ajouter pour les deux autres opérations en cas de tests (
NDFDgenByDay Test CaseetNDFDgenByDayLatLonList Test Case), une assertion sur le contenu. Vous vérifierez notamment que le résultat SOAP de chaque opération retourne correctement les informations de localisation (balise location).
III. Exercice 3 - Construire une suite de tests complexe (TestSuite)¶
III-A. But¶
- Enchaîner des appels à des opérations en séquence.
- Scripts SOAP-UI via le langage Groovy.
III-B. Description¶
Précédemment nous avons vu comment créer des cas de tests en ajoutant des assertions pour vérifier le bon fonctionnement d'une opération. Toutefois, dans les tests précédents l'enchaînement des opérations se fait de manière manuelle. La sortie d'une opération est transférée dans l'entrée d'une autre opération. Ainsi nous montrons dans cet exercice comment enchaîner les invocations des opérations LatLonListZipCode et NDFDgenByDayLatLonList en utilisant des scripts pour transférer automatiquement la sortie à l'entrée d'une opération.
III-C. Étapes à suivre¶
- À partir du projet
SOA-Labs1-NOAA, créer une nouvelle suite de tests que vous appellerezComplex TestSuite. - Définir dans cette suite de tests un cas de test nommé
LatLonListZipCode - NDFDgenByDayLatLonList Test Case. - Pour initialiser les entrées de l'opération
LatLonListZipCode, un fichier de propriétés est utilisé contenant la date de départ (startDate) et le code postal (zipCode). Ces valeurs sont chargées puis stockées dans la suite de tests. De cette façon pour changer les paramètres d'invocation, il n'est plus nécessaire de modifier la configuration du projet SOAP-UI. Au niveau du nœud du cas de test, faire bouton droit de la souris, puisAdd Stepet enfinProperties(laisser le nom par défaut). - Une nouvelle fenêtre Properties est affichée. Créer une propriété
startDatedont la valeur par défaut est2013-MM-DD(jour qui suit la date du jour). Créer une seconde propriétézipCodedont la valeur par défaut est10001. Le résultat attendu est celui présenté sur la figure ci-dessous.

- Au niveau de la fenêtre du cas de test
LatLonListZipCode - NDFDgenByDayLatLonList Test Case, cliquer sur le bouton Setup Script et saisir le code Groovy ci-dessous qui permet de charger les propriétés d'un fichier et initialiser celles définies précédemment.

- Créer à la racine du lecteur C un fichier nommé testprops.txt.
- Modifier le contenu du fichier de la manière suivante.
- Exécuter le cas de test et remarquer dans la console de log (script log) l'affichage des valeurs des propriétés startDate et zipCode.

- Ajouter au cas de test en cours la requête de l'opération
LatLonListZipCode(bien s'assurer de choisir le cas de test de la suite de testComplexTestSuite). Une deuxième étape a été normalement ajoutée dans le cas de test. - Modifier le message SOAP de la requête de ce deuxième cas de test de manière à ajouter la valeur
${Properties#zipCode}dans la liste des codes postaux (voir résultat attendu sur la figure ci-dessous).

- Ajouter dans le cas de test, une nouvelle étape qui est un script Groovy. Nommer ce script
Parse LatLonListZipCode Response. - Ajouter le code Groovy comme montré ci-dessous. Ce script extrait des informations issues de la réponse XML de l’opération appelée. Des assertions sont également réalisées pour assurer que la réponse soit correcte.
- Exécuter la suite de test et s’assurer que dans la console de log la latitude et la longitude soient correctement affichées.

- Ajouter au cas de test en cours, la requête de l'opération
NDFDgenByDayLatLonList. Une quatrième étape a été ajoutée dans le cas de test. - Modifier le message SOAP de la requête de ce quatrième cas de test de manière à ajouter la valeur
${latlon}dans la liste des latitudes et longitudes (élémentlistLatLon) et à ajouter la valeur${Properties#startDate}pour la date de départ (élément startDate), voir ci-dessous.

- Ajouter dans le cas de test, une dernière étape qui est un script Groovy. Nommer ce script
Parse NDFDgenByDayLatLonList Response. - Ajouter le code Groovy comme montré sur le code ci-dessous. Ce script extrait des informations issues de la réponse XML et effectue des assertions pour vérifier que le comportement de cette opération est correct.
- Ouvrir l'éditeur du cas de test
LatLonListZipCode - NDFDgenByDayLatLonList Test Caseet l'exécuter pour s'assurer que le test passe.

IV. Exercice 4 - Simuler un service web à partir de sa description WSDL¶
IV-A. But¶
- But: simuler un service web (MockService, MockResponse) à partir d'une description WSDL.
IV-B. Description¶
La simulation d'un service web est utilisée dans le cas où l'implémentation du service web en question n'est pas encore implémentée ou si le service web est actuellement dans un état d'indisponibilité (serveur indisponible dû à une défaillance). Dans cet exercice, nous considérons que l'appel à l'opération LatLonListZipCode n'est plus autorisé (opération en maintenance). Par conséquent nous mettons en place une simulation du comportement de cette opération.
IV-C. Étapes à suivre¶
- À partir du projet
SOA-Labs1-NOAA, cliquer droit et créer un New MockService appeléMockService NOAA. - Choisir l'opération
LatLonListZipCodedans la liste des opérations disponibles et faire Add to MockService. - Une réponse est automatiquement créée (
Response 1). Modifier le contenu en s'assurant que la valeur de la latitude et de la longitude correspondent aux valeurs suivantes:40.7198et-73.993.
- Sélectionner la réponse (
Response 1) deMockService NOAA, faire un clic droit puis Open Request. - Choisir Create New et définir comme nom
Request From MockService NOAA. Au niveau de l'opérationLatLonListZipCodedeux requêtes sont maintenant disponibles (voir figure ci-dessous).

- Ajouter la requête (
Request From MockService NOAA) au cas de testLatLonListZipCode - NDFDgenByDayLatLonList Test Casedéfini dans l'exercice 3 (ComplexTestSuite). - Déplacer la nouvelle requête de l'opération
LatLonListZipCodeen deuxième position puis désactiver la requêteRequest 1(voir figure ci-dessous).

- Démarrer la simulation de MockService NOAA (clic droit sur
MockService NOAApuis Start Minimized). - Exécuter la suite de tests pour s'assurer que le test est passé.