Assertions dans SoapUI: Scripts, XQuery, Types XPath
⚡ Résumé intelligent
Assertions dans SoapUI Ce sont les points de contrôle qui déterminent si une réponse de service Web est correcte, transformant une requête qui s'exécute simplement en un test qui réussit ou échoue réellement sur un contenu réel et vérifiable.
Qu'est-ce qu'une assertion ?
L'affirmation signifie l'acte d'affirmer ou de déclarer quelque chose. Il peut également être interprété comme un point de contrôle ou un point de validation.
Lorsqu'une requête est envoyée à un serveur web, une réponse est reçue. Il est nécessaire de vérifier si cette réponse contient les données attendues. Pour ce faire, on utilise des assertions. Sans assertion, un test prouve seulement que le service a répondu, et non qu'il a répondu correctement. C'est pourquoi chaque assertion est essentielle. Test d'API devrait en porter au moins un.
Types d'affirmation
Il existe différentes manières de formuler une réponse ; toutefois, nous nous concentrerons sur les plus courantes. SoapUI types d'assertions lors de la validation d'une réponse. Ci-dessous figurent les catégories disponibles dans la version Open Source de SoapUI.
- Contenu de la propriété
- Norme de statut de conformité
- scénario
- Contrat de niveau de service
- JMS
- Sécurité
La boîte de dialogue regroupe chaque assertion sous ces catégories, comme le montre la capture d'écran ci-dessous.

Outre les fonctionnalités mentionnées ci-dessus, la version Pro dispose également d'une assertion JDBC intégrée permettant de vérifier si le service Web a correctement mis à jour la base de données.
Note de version : actuel SoapUI La documentation mentionne également une JDBC catégorie (État JDBC et Délai d'attente JDBC) aux côtés des catégories ci-dessus, et une Contenu du message assertion au sein du contenu de la propriété pour une comparaison XML plus riche. L'édition commerciale appelée ici « Pro » est maintenant vendue sous le nom de ReadyAPI par SmartBear, les libellés des menus dans les versions plus récentes peuvent donc différer, même si le comportement des assertions reste le même.
Contient une assertion
Recherche l'existence de la chaîne spécifiée. Il prend également en charge les expressions régulières.
Nous continuerons avec le même exemple du tutoriel précédent avec une requête WSDL comme http://www.dneonline.com/calculator.asmxSi vous n'avez pas encore réalisé ce projet, suivez les étapes suivantes. création d'un projet, d'une suite de tests et d'un cas de test d'abord.
Étape 1 : Par défaut, il n’y a pas d’assertions.
- Le nombre d'assertions est affiché dans l'onglet Assertions.
- Pour ajouter une nouvelle assertion, cliquez sur le bouton « Ajouter une nouvelle assertion ».
Étape 2: Maintenant,
- Sélectionnez la catégorie d'assertion.
- Sélectionnez le type d'assertion.
- Cliquez sur « Ajouter »
Étape 3 : Vérifions si la chaîne « 46 » figure dans la réponse. Cliquez sur « OK ».
Remarque : Nous pouvons également ignorer la casse et ajouter une expression régulière.
Étape 4 : Dès son ajout, une assertion est immédiatement exécutée et indique si elle est VALIDE ou INVALIDE.
Étape 5 : Supposons maintenant que nous modifions le contenu de « Contient l’assertion dans ». SoapUIPassez à '47' et voyez ce qui se passe.
Étape 6 : L’assertion est exécutée et le résultat est renvoyé à l’utilisateur. Comme la chaîne « 47 » est absente de la réponse, l’assertion a échoué.
Ne contient pas d'assertion
Son homologue fonctionne à l'inverse : il recherche l'absence de la chaîne spécifiée et prend également en charge les expressions régulières.
Étape 1 : Après avoir cliqué sur le bouton « Ajouter de nouvelles assertions »,
- Sélectionnez la catégorie d'assertion.
- Sélectionnez le type d'assertion – Dans ce cas, « NE contient PAS »
- Cliquez sur « Ajouter »
Étape 2 : Vérifions si la chaîne « intA » figure dans la réponse. Saisissez la chaîne « FromCurrency » et cliquez sur « OK ».
Étape 3 : Dès qu’une assertion est ajoutée, elle est exécutée et son résultat s’affiche. Nous avons ajouté deux assertions jusqu’à présent ; elles sont donc toutes deux exécutées et leur résultat est affiché.
Étape 4 : Modifions maintenant le contenu de l’assertion « Ne contient pas » et observons le résultat. Nous allons vérifier l’absence de la chaîne « AddResult ».
Étape 5 : La chaîne « AddResult » est effectivement présente dans la réponse, par conséquent l’assertion « NOT Contains » échouera comme indiqué ci-dessous.
Assertion de correspondance XPath
La correspondance de chaînes étant imprécise, l'assertion suivante cible un seul nœud. Elle utilise une expression XPath pour sélectionner le nœud cible et ses valeurs. XPath, est un langage de requête XML permettant de sélectionner des nœuds dans un document XML.
Étape 1 : Après avoir cliqué sur le bouton « Ajouter de nouvelles assertions »,
- Sélectionnez la catégorie d'assertion.
- Sélectionnez le type d'assertion – Dans ce cas, « XPath Match »
- Cliquez sur « Ajouter »
Étape 2 : Ajouter XPath. La fenêtre s’ouvre.
Avant d'ajouter un SoapUI En XPath, il est nécessaire de déclarer l'espace de noms. Un espace de noms XML est un ensemble de noms, identifiés par une référence URI (Uniform Resource Identifier), utilisés dans les documents XML comme noms d'éléments et d'attributs. Le même principe s'applique à… SoapUI Assertion XPath.
Pour déclarer un espace de noms XML, il suffit de cliquer sur le bouton « Déclarer », qui se chargera du reste ; sinon, nous pouvons également déclarer manuellement un espace de noms.
Après avoir déclaré l'espace de noms, nous devons faire référence au XPath en utilisant l'espace de noms créé.
En cliquant sur le bouton « Déclarer », deux espaces de noms s'affichent, car nous avons deux URI. L'un d'eux est le schéma. URL et l'autre correspond au service web proprement dit URLIl est nécessaire d'utiliser l'espace de noms réel où se trouve le service web, et non l'espace de noms du schéma, lors de l'utilisation de XPath. Les lignes déclarées apparaissent en haut de la zone XPath, comme illustré ci-dessous.
déclarer l'espace de noms soap='http://schemas.xmlsoap.org/soap/envelope/';
déclarer l'espace de noms ns1='http://tempuri.org/';
Étape 3 : Nous devons maintenant saisir le XPath du nœud XML que nous devons valider.
//ns1:AddResult Nous donne la valeur du nœud compris entre & et ns1 correspond à l'espace de noms déclaré qui pointe vers 'http://tempuri.org/'
Après avoir entré le XML, nous devons cliquer sur « Sélectionner à partir du courant » afin que la valeur de la réponse actuelle soit récupérée pour une comparaison ultérieure.
Étape 4 : Jusqu’à présent,
- Après avoir déclaré les espaces de noms, nous sommes entrés dans le nœud XPath du XML que nous devons valider.
- Nous devons cliquer sur « Sélectionner à partir du courant » pour faire de la valeur actuelle la valeur attendue.
- La valeur actuelle est affichée à l'utilisateur et nous pouvons la modifier si nécessaire.
- Cliquez sur « Enregistrer ».
Étape 5 : L’assertion ajoutée dans SoapUI s'affichera comme indiqué ci-dessous.
Assertions de script
Cette technique d'assertion est la plus utilisée car elle est extrêmement difficile à gérer et à maintenir des centaines d'assertions.
SoapUI utilise soit Groovy Script ou Javascénario pour les assertions de script. La technique de script est adoptée pour le développementping un cadre de test pour SOAP. Les assertions de script sont utilisées dans les circonstances suivantes.
- Le script permet à l'utilisateur d'effectuer certaines opérations avant et après l'exécution d'un cas de test, grâce aux méthodes de configuration (setup) et de nettoyage (teardown). La configuration est une procédure exécutée avant l'exécution d'une méthode particulière (par exemple, la création et l'initialisation d'un objet), tandis que le nettoyage est une procédure exécutée après l'exécution de la méthode (par exemple, la destruction des objets et le nettoyage de la mémoire). Cette fonctionnalité n'est pas disponible pour les autres types d'assertions et ne peut être implémentée que par le biais du code.
- Il permet aux utilisateurs d'ouvrir/fermer un projet, d'initialiser ou de nettoyer les paramètres liés au projet et également de travailler avec des variables d'environnement, ce qui est très utile lors de la création de scripts.
- Cela nous aide à affirmer un contenu de réponse dynamique.
- Les assertions de script sont utilisées pour créer des assertions définies par l'utilisateur qui ne sont PAS prédéfinies par SoapUI.
Pour démontrer une assertion de script dans SoapUINous utiliserons le WSDL de la calculatrice, le cas de test « Add » que nous avions créé précédemment.
Étape 1 : La procédure d’ajout d’un script Groovy est identique à celle des autres assertions, à ceci près que l’assertion n’est pas prédéfinie. Il s’agit d’une assertion définie par l’utilisateur, offrant une plus grande flexibilité que les assertions intégrées.
Sélectionnez l'étape de test à laquelle l'assertion doit être ajoutée.
Cliquez sur le bouton « Ajouter une assertion » comme indiqué ci-dessous.
Étape 2 : Sélectionnez maintenant la catégorie Assertion.
- Dans ce cas, il s'agit de Script.
- Sélectionner SoapUI Assertion de script et aucun sous-type associé.
- Cliquez sur « Ajouter ».
Étape 3 : La boîte de dialogue de script s’ouvre, dans laquelle l’utilisateur pourra écrire un script personnalisé pour valider la réponse XML.
Étape 4 : Écrivons maintenant un script Groovy pour valider le taux de conversion. Le script est joint ci-dessous avec les commentaires intégrés. Il est recommandé d’avoir des connaissances en… Java Scénario ou Groovy Script avant d’essayer d’écrire votre propre script.
//Define Groovy Utils and holder for validating the XML reponse content def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) def holder = groovyUtils.getXmlHolder(messageExchange.responseContent) //Define the NameSpace holder.namespaces["ns1"] = "http://tempuri.org/" //Get the Value of the Node 'AddResult' and assign to a variable def addResult = holder.getNodeValue("//ns1:AddResult") //print the value of the result in the Output panel log.info "The result value for integers is " + addResult //Comparing the value to print 'Pass' or 'Fail' if(addResult=="46") { log.info "Pass" } else { log.info "fail"}
- Cliquez sur le bouton « Exécuter » pour déclencher l'exécution.
- La sortie du script est affichée dans le volet Sortie. Il a imprimé à la fois la valeur de conversion ainsi que le résultat final (réussite ou échec).
- Les informations affichées indiquent « Assertion de script réussie ». Cliquez sur OK.
Remarque : La fenêtre contextuelle d'information finale s'affichera toujours avec le message « Assertion de script réussie » tant que le script est syntaxiquement correct. Cela n'a aucune corrélation avec votre affirmation dans le script.
cliquez sur OK
Étape 5 : L’onglet Assertion affiche maintenant toutes les assertions que nous avons ajoutées pour cette suite de tests, avec le statut de chacune d’elles.
Étape 6: maintenant
- Sélectionnez la suite de tests dans l'arborescence du navigateur
- Cliquez sur le bouton « Exécuter »
- Les résultats seraient affichés pour l’ensemble de la suite de tests.
Assertion de correspondance XQuery
Elle utilise une expression XQuery pour sélectionner le contenu de la propriété cible. Nous avons besoin d'une réponse XML beaucoup plus volumineuse pour mieux comprendre l'assertion XQuery. SoapUIImportons un autre fichier WSDL, comme indiqué ci-dessous : http://www.webservicex.net/medicareSupplier.asmx?WSDL
À noter: Les points de terminaison de démonstration publics de webservicex.net utilisés dans ce tutoriel ne sont plus accessibles de manière fiable ; les captures d’écran de requêtes et de réponses ci-dessous sont donc conservées à titre d’exemple. Tout WSDL renvoyant un ensemble de nœuds répétitifs déclenchera l’assertion XQuery de manière identique.
Étape 1 : Faites un clic droit sur le projet existant et sélectionnez « Ajouter WSDL ».
Étape 2 : La boîte de dialogue Ajouter un WSDL s’ouvre. Laissez les autres options par défaut et cliquez sur le bouton « OK ».
Étape 3 : Toutes les opérations sont listées comme indiqué ci-dessous.
Étape 4 : Ajoutons maintenant un Cas de test au sein de la même suite de tests que nous avions créée pour Tests le convertisseur de devises.
Étape 5 : Saisissez le nom du cas de test et cliquez sur le bouton « OK ».
Étape 6 : Le cas de test est créé comme indiqué ci-dessous.
Étape 7 : Ajoutez une nouvelle étape de test de type « Requête de test SOAP » comme indiqué ci-dessous.
Étape 8 : Saisissez le nom de l’étape de test. Par exemple : « Fournisseur_par_Ville », ce qui serait plus explicite. Cliquez sur « OK ».
Étape 9: Sélectionnez le Operation que nous souhaitons valider. Dans ce cas, il s'agit de « MedicareSupplierSoap -> GetSupplierByCity ». Cliquez sur « OK ».
Étape 10 : Saisissez le nom du cas de test et cliquez sur « OK ».
Étape 11 : Le schéma XML de la requête s’affichera comme indiqué ci-dessous.
Étape 12 : Maintenant, recherchons toutes les informations sur les fournisseurs pour la ville de « New York ».
Pour ce faire, ajoutez les lignes suivantes à votre code.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL ci-dessous URL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Étape 13 : Après l’exécution du test, nous obtenons la réponse ci-dessous.
Étape 14 : Supposons que nous devions valider tous les numéros de fournisseur. Nous ne pouvons pas utiliser d’assertions XPath, car il nous en faudrait des centaines. L’utilisation de XQuery est donc inévitable dans ce cas.
XQuery Assertion nous aide à valider un groupe de réponses XML de nature répétitive.
Étape 15 : Cliquez maintenant sur « Ajouter une assertion ».
- Sélectionnez la « Catégorie d'assertion » – Contenu de la propriété dans ce cas.
- Sélectionnez le type d'assertion comme « Assertion XQuery »
- Cliquez sur « Ajouter ».
Étape 16 : Comme pour l’assertion XPath, nous devons déclarer l’espace de noms.
- Cliquez sur le bouton « Déclarer » pour autoriser automatiquement SoapUI Pour déclarer l'espace de noms, cliquez sur le bouton « Déclarer ». Une fenêtre contextuelle s'affichera avec le message « Déclarez plutôt l'espace de noms à partir du schéma ». Cliquez sur « Oui » pour continuer, comme indiqué ci-dessous.
- Pour récupérer tous les numéros de fournisseur, nous devons écrire une requête XPath et nous la placerons dans < SupplierNumber> et Mots clés.
- Cliquez sur « Sélectionner à partir du courant » qui s'exécutera à partir de la réponse actuelle.
- En cliquant sur « Sélectionner parmi les fournisseurs actuels », tous les numéros de fournisseur s'affichent.
- Cliquez sur « Enregistrer ».
Remarque : En cliquant sur le bouton « Déclarer », vous pourriez obtenir des résultats différents. URLBien que cette déclaration d'espace de noms soit utilisée, c'est l'espace de noms de l'emplacement réel du service Web qui sera pris en compte pour le codage.
L'expression XQuery finale, avec ses déclarations d'espace de noms, ressemble à ceci.
// Namespace declaration declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/'; declare namespace ns1='http://www.webservicex.net/'; declare namespace x = ''; // Placing the result in Myresult Tags{ // Iterating through all the supplier number for $x in //ns1:GetSupplierByCityResponse/ns1:SupplierDataLists/ns1:SupplierDatas/ns1:SupplierData //Return all the Supplier number within ‘SupplierNumber’ Tags. return {data($x/ns1:SupplierNumber)} }
Étape 17 : L’assertion XQuery est exécutée et affiche le résultat final dans le panneau « Assertion », comme illustré ci-dessous. Nous avons ainsi ajouté avec succès une assertion XQuery permettant de valider toutes les informations relatives aux numéros de fournisseur. Ces informations seront comparées aux valeurs réelles à chaque envoi d’une requête au serveur web.
Remarque : Les valeurs réelles ne seront pas affichées. Si toutes les valeurs réelles sont identiques à celles des valeurs attendues, alors il affiche VALIDE, sinon il affichera « Échec ».
Quand utiliser l’assertion intégrée ?
Les options de pointage et de clic ainsi que les options scriptées étant toutes deux abordées, la question pratique est de savoir laquelle choisir.
- Lorsqu'une réponse est courte, elle peut être validée à l'aide de l'une de ces assertions intégrées.
- Nous pouvons également utiliser l'assertion intégrée si la réponse envoyée depuis le serveur Web est toujours de nature statique. S'il est dynamique, nous ne pourrons pas l'affirmer à l'aide d'assertions intégrées.
- Lorsque l'utilisation d'assertions intégrées telles que les assertions Time out et les assertions de sécurité devient inévitable.
- Les assertions intégrées conviennent assez bien pour une utilisation unique où les tests n'ont pas besoin d'être répétés.
Options d'assertions
Les assertions créées peuvent être mieux contrôlées à l'aide du panneau de contrôle mis en évidence ci-dessous.
Les assertions créées permettent aux testeurs de configurer les éléments suivants à partir de la boîte à outils d'assertions.
| Option | Description |
| L'assertion sélectionnée monte dans l'ordre. | |
| L'assertion sélectionnée descend dans l'ordre. | |
| Supprime l'assertion sélectionnée | |
| Reconfigurez/modifiez l'assertion sélectionnée. |
Vous trouverez ci-dessous les fonctionnalités disponibles exclusivement dans la version Pro de SoapUI, maintenant expédié sous forme de ReadyAPILa version Pro nous permet également de regrouper les assertions afin d'ajouter une couche de validation supplémentaire aux assertions créées.
- ET: Toutes les assertions sont évaluées comme des assertions VALIDES, ce qui entraînera la réussite du groupe.
- OU: Au moins une des assertions au sein du groupe doit être VALIDE pour qu'une condition de groupe RÉUSSIE soit établie.
- La version Pro permet également Clonage d'assertionsCette option permet aux testeurs d'autoriser la copie d'une assertion vers une autre étape de test, que ce soit dans le même projet ou dans un projet différent.
- Activer/Désactiver les assertions : cette option permet d’activer ou de désactiver toute assertion, groupée ou non. Une assertion désactivée est grisée et ne sera pas exécutée lors de l’exécution d’un test.
- Dissocier les assertions groupées : les assertions groupées peuvent être dissociées si les testeurs le souhaitent.
Liste complète des méthodes disponibles dans différents types d'assertions
Le tableau ci-dessous rassemble toutes les assertions mentionnées ci-dessus, regroupées par catégorie dans laquelle elles apparaissent dans la boîte de dialogue Ajouter une assertion.
| Mécanisme d'affirmation | Description |
| CONTENU DE LA PROPRIÉTÉ | |
| Inclus | Recherche l'existence de la chaîne spécifiée. Il prend également en charge les expressions régulières. |
| Ne contient pas | Recherche la non-existence de la chaîne spécifiée. Il prend également en charge les expressions régulières. |
| Correspondance XPath | Utilise l'expression XPath pour sélectionner le nœud cible et ses valeurs. |
| Correspondance XQuery | Utilise une expression XQuery pour sélectionner le contenu de la propriété cible. |
| Conformité, statut, normes | |
| HTTP Télécharger toutes les ressources | Valide le document HTML après le téléchargement et il est valable pour toute propriété contenant du HTML. |
| Statut HTTP invalide Codes | Vérifie si la réponse HTML contient un code d'état qui ne figure pas dans la liste des codes définis. |
| Pas de défaut SOAP | Vérifie si le dernier message reçu n'est pas une erreur SOAP. Il est très évident que cela ne s'applique qu'aux étapes de test SOAP. |
| Conformité au schéma | Vérifie si le dernier message reçu est conforme à la définition de schéma standard WSDL ou WADL. Convient aux étapes de test SOAP et REST. |
| Défaut SAVON | Vérifie si le dernier message reçu est une erreur SOAP. C'est l'inverse des assertions de faute « PAS SOAP ». |
| Réponse SOAP | Vérifie si la dernière réponse reçue est une réponse SOAP valide et est valable uniquement pour les étapes de demande de test SOAP. |
| Statut HTTP valide Codes | Vérifie si la réponse HTML contient un code d'état figurant dans la liste des codes définis. C'est l'inverse d'un code d'état HTTP invalide. Codes' Assertion. |
| Demande d'adressage WS | Vérifie si la dernière demande reçue contient les en-têtes WS-Addressing appropriés. |
| Réponse d'adressage WS | Vérifie si la dernière réponse reçue contient les en-têtes WS-Addressing appropriés. |
| Statut de sécurité WS | Valide si le dernier message reçu contient des en-têtes WS-Security valides et est valable uniquement pour les requêtes SOAP. |
| scénario | |
| Assertion de script | Permet aux utilisateurs d'exécuter un script personnalisé pour effectuer des validations définies par l'utilisateur. |
| Contrat de niveau de service | |
| Réponse SLA | Valide si le temps de réponse de la dernière réponse reçue était dans la limite définie. |
| JMS | |
| Statut JMS | Vérifie si la requête JMS de l'étape de test s'est exécutée avec succès et est valable pour les étapes de test avec un point de terminaison JMS. |
| Expiration du délai JMS | Vérifie si la réponse JMS d'une étape de test n'a pas pris plus de temps que la durée spécifiée. |
| Sécurité | |
| Exposition à des informations sensibles | Vérifie si le message de réponse n'expose pas d'informations sensibles sur le système cible. Nous pouvons utiliser cette assertion pour les étapes de test REST, SOAP et HTTP. |
TÉLÉCHARGEZ LE PROJET SOAPUI CONTENANT LES ASSERTIONS CI-DESSUS
Erreurs courantes et dépannage
La plupart des échecs d'assertion tracNous en revenons à un petit nombre d'erreurs, alors vérifiez-les avant de réécrire une expression.
- Utilisez l'espace de noms correct. L'espace de noms doit être le URL où se trouve le service web.
- Si une erreur est levée lors du développementping Dans une assertion de script, utilisez 'log.info' pour afficher le contenu des variables.
- Si vous n'obtenez pas le résultat souhaité, vérifiez si une entrée valide est transmise dans la requête.
Par exemple, dans un convertisseur de devises, si vous saisissez « x » comme valeur non entière pour « intA », le système renvoie le code d'erreur « SOAP-Client », indiquant un problème avec le paramètre transmis par le client. La requête contenant la valeur invalide est affichée en premier.
La réponse renvoie le code d'erreur au lieu d'un résultat, comme indiqué ci-dessous.
Assurez-vous d'utiliser la syntaxe correcte lors de l'utilisation d'assertions XPath et XQuery. N'utilisez PAS le point (.) à la place du deux-points (:) dans l'assertion ci-dessus. La syntaxe correcte est //namespace:Tagname et NON //namespace.tagname. En cas d'erreur, vous risquez d'obtenir le message « Aucune correspondance dans la réponse actuelle » même si le nom de la balise est correct.














































