Beweringen in SoapUI: Scripts, XQuery, XPath-typen
⚡ Slimme samenvatting
Beweringen in SoapUI Dit zijn de controlepunten die bepalen of een reactie van een webservice correct is, waardoor een verzoek dat slechts wordt uitgevoerd, verandert in een test die daadwerkelijk slaagt of faalt op basis van echte, verifieerbare inhoud.
Wat is een bewering?
Bewering betekent een handeling waarbij iets wordt bevestigd of verklaard. Het kan ook worden geïnterpreteerd als een controlepunt of een validatiepunt.
Zodra een verzoek naar een webserver wordt verzonden, wordt een reactie ontvangen. We moeten controleren of de reactie de verwachte gegevens bevat. Om de reactie te valideren, moeten we beweringen (assertions) gebruiken. Zonder een bewering bewijst een teststap alleen dat de service heeft gereageerd, niet dat de reactie correct was. Daarom is elke API-test Je moet er minstens één bij je hebben.
Soorten beweringen
Er zijn verschillende manieren om een reactie te formuleren; we zullen ons echter richten op de meest gebruikte methoden. SoapUI Assertietypen bij het valideren van een reactie. Hieronder staan de categorieën die beschikbaar zijn in de open source-versie. SoapUI.
- Eigenschapinhoud
- Nalevingsstatus Standaard
- Script
- SLA
- JMS
- Security
Het dialoogvenster groepeert alle beweringen onder die categorieën, zoals de onderstaande schermafbeelding laat zien.

Naast de hierboven genoemde functies beschikt de Pro-versie ook over een ingebouwde JDBC-assertie waarmee we kunnen controleren of de webservice de database correct heeft bijgewerkt.
Versie-opmerking: actueel SoapUI De documentatie vermeldt ook een JDBC categorie (JDBC-status en JDBC-time-out) naast de bovenstaande categorieën, en een Berichtinhoud bewering binnen Property Content voor een rijkere XML-vergelijking. De commerciële editie, hier aangeduid als "Pro", wordt nu verkocht als ReadyAPI Door SmartBear, dus menulabels in nieuwere builds kunnen er anders uitzien, terwijl het gedrag van de assertie hetzelfde blijft.
Bevat bewering
Zoekt naar het bestaan van de opgegeven tekenreeks. Het ondersteunt ook reguliere expressie.
We gaan verder met hetzelfde voorbeeld uit de vorige tutorial met WSDL-verzoek als http://www.dneonline.com/calculator.asmxAls je dat project nog niet hebt gebouwd, ga dan aan de slag. Het creëren van een project, testsuite en testcase. kopen.
Stap 1: Standaard zijn er geen beweringen.
- Het aantal beweringen wordt weergegeven op het tabblad Beweringen.
- Om een nieuwe bewering toe te voegen, klikt u op de knop 'Nieuwe bewering toevoegen'.
Stap 2: Nu,
- Selecteer de beweringcategorie.
- Selecteer het Beweringstype.
- Klik op 'Toevoegen'
Stap 3: Laten we controleren of de tekenreeks '46' in het antwoord voorkomt. Klik op 'OK'.
Opmerking: we kunnen hoofdletters en kleine letters ook negeren en reguliere expressies toevoegen.
Stap 4: Na het toevoegen wordt direct een controle uitgevoerd die aangeeft of het geldig of ongeldig is.
Stap 5: Stel nu dat we de inhoud van 'Contains Assertion in' wijzigen. SoapUI' naar '47' en kijk wat er gebeurt.
Stap 6: De bewering wordt uitgevoerd en het resultaat wordt aan de gebruiker getoond. Omdat de tekenreeks '47' niet in het antwoord voorkomt, is de bewering mislukt.
Bevat geen bewering
De tegenhanger werkt precies andersom. Die zoekt naar het niet-bestaan van de opgegeven tekenreeks. Ook reguliere expressies worden ondersteund.
Stap 1: Klik nu op de knop 'nieuwe beweringen toevoegen',
- Selecteer de beweringcategorie.
- Selecteer het beweringstype – in dit geval 'NIET bevat'
- Klik op 'Toevoegen'
Stap 2: Laten we controleren of de tekenreeks 'intA' in het antwoord voorkomt. Voer de tekenreeks 'FromCurrency' in en klik op 'OK'.
Stap 3: Zodra een bewering is toegevoegd, wordt deze uitgevoerd en het resultaat weergegeven. Tot nu toe hebben we twee beweringen toegevoegd, dus beide beweringen worden uitgevoerd en het resultaat wordt weergegeven.
Stap 4: Laten we nu de inhoud van de 'Not Contains Assertion' wijzigen en kijken wat er gebeurt. We controleren of de tekenreeks "AddResult" niet bestaat.
Stap 5: De tekenreeks 'AddResult' is daadwerkelijk aanwezig in het antwoord, waardoor de bewering 'NOT Contains' zal mislukken zoals hieronder wordt weergegeven.
XPath-matchverklaring
Stringmatching is niet erg nauwkeurig, daarom richt de volgende bewering zich in plaats daarvan op één enkel knooppunt. Er wordt gebruikgemaakt van een XPath-expressie om het doelknooppunt en de bijbehorende waarden te selecteren. XPathis een XML-querytaal voor het selecteren van knooppunten uit een XML-document.
Stap 1: Klik nu op de knop 'Nieuwe beweringen toevoegen',
- Selecteer de beweringcategorie.
- Selecteer het Assertion Type – In dit geval 'XPath Match'
- Klik op 'Toevoegen'
Stap 2: Het venster 'XPath toevoegen' wordt geopend.
Voordat u een SoapUI Bij XPath moeten we de namespace declareren. Een XML-namespace is een verzameling namen, geïdentificeerd door een Uniform Resource Identifier (URI)-referentie, die in XML-documenten worden gebruikt als element- en attribuutnamen. Hetzelfde geldt voor de SoapUI XPath-assertie.
Om een XML-naamruimte te declareren, hoeven we alleen maar op de knop 'Declareren' te klikken. Dat doet de rest. We kunnen een naamruimte echter ook handmatig declareren.
Nadat we de naamruimte hebben gedeclareerd, moeten we naar het XPath-pad verwijzen met behulp van de aangemaakte naamruimte.
Na het klikken op de knop 'Declareren' verschijnen er twee naamruimten, aangezien we twee URI's hebben. Een daarvan is het schema. URL en de andere komt overeen met de daadwerkelijke webservice. URLWe moeten de daadwerkelijke naamruimte gebruiken waarin de webservice zich bevindt, en NIET de schemanaamruimte, bij het verwijzen naar XPath. De gedeclareerde regels verschijnen bovenaan het XPath-vak, zoals hieronder weergegeven.
declareer naamruimte soap='http://schemas.xmlsoap.org/soap/envelope/';
declareer naamruimte ns1='http://tempuri.org/';
Stap 3: Nu moeten we het XPath-pad invoeren van het XML-knooppunt dat we willen valideren.
//ns1:AddResult Geeft ons de waarde van het knooppunt ertussen & en ns1 komt overeen met de gedeclareerde naamruimte die verwijst naar 'http://tempuri.org/'
Na het invoeren van de XML moeten we op 'Selecteren uit huidig' klikken, zodat de waarde van het huidige antwoord wordt opgehaald voor toekomstige vergelijking.
Stap 4: Tot nu toe,
- Nadat we de naamruimten hebben gedeclareerd, hebben we het XPath van het XML-knooppunt ingevoerd dat we moeten valideren.
- We moeten op 'Selecteren uit huidige' klikken om de huidige waarde als de verwachte waarde te maken.
- De huidige waarde wordt aan de gebruiker getoond en kunnen we indien nodig wijzigen.
- Klik op 'Opslaan'.
Stap 5: De toegevoegde bewering in SoapUI Het resultaat wordt weergegeven zoals hieronder.
Scriptie van beweringen
Deze Assertie-techniek is de meest gebruikte techniek, omdat het uiterst moeilijk is om honderden beweringen te beheren en te onderhouden.
SoapUI gebruikt ofwel Groovy Scripten of JavaScript voor het scripten van beweringen. De scripttechniek wordt gebruikt voor de ontwikkeling van...ping Een framework voor het testen van SOAP. Scripting-asserties worden onder de volgende omstandigheden gebruikt.
- Scripting stelt gebruikers in staat om bepaalde bewerkingen uit te voeren vóór en na de uitvoering van een testcase, respectievelijk met behulp van de `setup` en `teardown` methoden. `setup` is een procedure die wordt uitgevoerd vóór de uitvoering van een specifieke methode (bijvoorbeeld het aanmaken en initialiseren van een object), terwijl `teardown` een procedure is die wordt uitgevoerd na de uitvoering van de methode (bijvoorbeeld het vernietigen van objecten en opruimen). Deze functionaliteit is niet beschikbaar in andere typen Asserties en kan alleen via code worden gerealiseerd.
- Het stelt gebruikers in staat een project te openen/sluiten, projectgerelateerde instellingen te initialiseren of op te ruimen en ook om met omgevingsvariabelen te werken, wat erg handig is tijdens het scripten.
- Het helpt ons bij het beweren van een dynamische responsinhoud.
- Scripting-asserties worden gebruikt voor het maken van door de gebruiker gedefinieerde beweringen die NIET vooraf zijn gedefinieerd. SoapUI.
Om een Script-assertie te demonstreren in SoapUIWe zullen gebruikmaken van de rekenmachine-WSDL, de testcase 'Add' die we eerder hebben gemaakt.
Stap 1: Het toevoegen van een Groovy-script verloopt op dezelfde manier als bij andere beweringen, met als enige verschil dat het geen vooraf gedefinieerde bewering is. In plaats daarvan is het een door de gebruiker gedefinieerde bewering, die meer flexibiliteit biedt dan de ingebouwde beweringen.
Selecteer de teststap waaraan de bewering moet worden toegevoegd.
Klik op de knop 'Bewering toevoegen', zoals hieronder weergegeven.
Stap 2: Selecteer nu de categorie 'Bewering'.
- In dit geval is dat Script.
- Selecteren SoapUI Script Assertion en er zijn geen subtypen aan verbonden.
- Klik op 'Toevoegen'.
Stap 3: Het scriptdialoogvenster wordt geopend, waar de gebruiker een zelfgedefinieerd script kan schrijven om de XML-respons te valideren.
Stap 4: Laten we nu een Groovy-script schrijven om de conversieratio te valideren. Het script is hieronder bijgevoegd, inclusief de ingesloten opmerkingen. Het is aan te raden om kennis te hebben van... Java Scriptie of Groovy Script voordat u probeert uw eigen script te schrijven.
//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"}
- Klik op de knop 'Uitvoeren' om de uitvoering te activeren.
- De uitvoer van het script wordt weergegeven in het deelvenster Uitvoer. Het heeft zowel de conversiewaarde als het eindresultaat (geslaagd of mislukt) afgedrukt
- Er wordt informatie weergegeven dat 'Script Assertion Passed' is. Klik op OK.
Opmerking: De laatste pop-up met informatie wordt altijd weergegeven met het bericht 'Script Assertion Passed', zolang het script syntactisch correct is. Het heeft geen correlatie met uw bewering in het script.
klik op OK
Stap 5: Nu toont het tabblad 'Asserties' alle beweringen die we voor deze testsuite hebben toegevoegd, met de status bij elk ervan.
Stap 6: Nu
- Selecteer de Testsuite in de Navigator-structuur
- Klik op de knop 'Uitvoeren'
- Resultaten worden weergegeven voor de gehele testsuite.
XQuery Match Assertie
Het gebruikt een XQuery-expressie om inhoud uit de doelproperty te selecteren. We hebben een veel uitgebreidere XML-respons nodig om de XQuery-assertie beter te begrijpen. SoapUILaten we nog een WSDL importeren, zoals hieronder weergegeven: http://www.webservicex.net/medicareSupplier.asmx?WSDL
Let op: De openbare demo-eindpunten van webservicex.net die in deze handleiding worden gebruikt, zijn niet langer betrouwbaar bereikbaar. Daarom worden de onderstaande schermafbeeldingen van de aanvraag en het antwoord als referentievoorbeeld bewaard. Elke WSDL die een herhalende knooppuntenset retourneert, zal de XQuery-assertie op exact dezelfde manier testen.
Stap 1: Klik met de rechtermuisknop op het bestaande project en selecteer 'WSDL toevoegen'.
Stap 2: Het dialoogvenster 'WSDL toevoegen' wordt geopend. Laat de overige opties op de standaardwaarden staan en klik op de knop 'OK'.
Stap 3: Alle bewerkingen staan hieronder vermeld.
Stap 4: Laten we nu een toevoegen Testgeval binnen dezelfde testsuite waarvoor we hadden gemaakt Testen de valuta-omzetter.
Stap 5: Voer de naam van de testcase in en klik op de knop 'OK'.
Stap 6: De testcase wordt gemaakt zoals hieronder weergegeven.
Stap 7: Voeg een nieuwe teststap van het type 'SOAP-testverzoek' toe, zoals hieronder weergegeven.
Stap 8: Voer de naam van de teststap in. Laten we zeggen: Supplier_by_City, dat is veel duidelijker. Klik op 'OK'.
Stap 9: Selecteer de Operadie we willen valideren. In dit geval is het 'MedicareSupplierSoap -> GetSupplierByCity'. Klik op 'OK'.
Stap 10: Voer de naam van de testcase in en klik op 'OK'.
Stap 11: De XML-structuur van het verzoek wordt als volgt weergegeven.
Stap 12: Laten we nu alle leveranciersinformatie voor de stad 'New York' opzoeken.
Voeg hiervoor de volgende regels toe aan uw code.
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
WSDL in het onderstaande URL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
Stap 13: Na het uitvoeren van de test ontvangen we het onderstaande antwoord.
Stap 14: Stel dat we alle leveranciersnummers moeten valideren. We kunnen geen XPath-asserties gebruiken, omdat we er honderden nodig zouden hebben. Daarom is het gebruik van XQuery in dit geval onvermijdelijk.
XQuery Assertion helpt ons een groep XML-antwoorden te valideren die repetitief van aard zijn.
Stap 15: Klik nu op 'Een bewering toevoegen'.
- Selecteer in dit geval de 'Beweringscategorie' – Eigenschapsinhoud.
- Selecteer het bevestigingstype als 'XQuery-bevestiging'
- Klik op 'Toevoegen'.
Stap 16: Net als bij XPath Assertion moeten we de naamruimte declareren.
- Klik op de knop 'Verklaren' om dit automatisch toe te staan. SoapUI Om de naamruimte te declareren. Na het klikken op de knop 'Declareren' verschijnt een pop-upvenster met de melding 'Declareer in plaats daarvan de naamruimte vanuit het schema'. Klik op 'Ja' om verder te gaan, zoals hieronder weergegeven.
- Om het volledige leveranciersnummer op te halen, moeten we een XPath-query schrijven en deze plaatsen in <Leveranciernummer> en Labels.
- Klik op 'Selecteer uit de huidige' die wordt uitgevoerd vanuit het huidige antwoord.
- Na het klikken op 'Selecteer uit de huidige' worden alle leveranciersnummers weergegeven.
- Klik op 'Opslaan'.
Let op: na het klikken op de knop 'Verklaren' kunt u mogelijk andere resultaten krijgen. URL's als naamruimtedeclaratie, maar de daadwerkelijke naamruimte van de webservicelocatie is wat voor de programmering in aanmerking zou worden genomen.
De voltooide XQuery-expressie, inclusief de naamruimtedeclaraties, ziet er als volgt uit.
// 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)} }
Stap 17: De XQuery-assertie wordt uitgevoerd en het eindresultaat wordt weergegeven in het paneel 'Assertie', zoals hieronder te zien is. We hebben nu met succes een XQuery-assertie toegevoegd waarmee we alle leveranciersnummerinformatie hebben gevalideerd. Deze informatie wordt vergeleken met de werkelijke gegevens telkens wanneer een verzoek naar de webserver wordt verzonden.
Let op: De werkelijke waarden worden niet weergegeven. Als alle werkelijke waarden gelijk zijn aan de verwachte waarden, wordt GELDIG weergegeven, anders wordt 'Mislukt' weergegeven.
Wanneer gebruik je ingebouwde assertiviteit?
Nu zowel de muisklik- als de scriptgestuurde opties aan bod zijn gekomen, is de praktische vraag welke je moet kiezen.
- Wanneer een antwoord zo kort is dat het kan worden gevalideerd met behulp van een van die ingebouwde beweringen.
- We kunnen Inbuilt Assertion ook gebruiken als het antwoord dat vanaf de webserver wordt verzonden altijd statisch van aard is. Als het dynamisch is, kunnen we het niet beweren met behulp van ingebouwde beweringen.
- Wanneer het gebruik van ingebouwde beweringen, zoals time-outbeweringen en beveiligingsbeweringen, onvermijdelijk wordt.
- Ingebouwde beweringen zijn redelijk goed geschikt voor eenmalig gebruik waarbij tests niet herhaald hoeven te worden.
Beweringen Opties
De gemaakte beweringen kunnen het beste worden beheerd met behulp van het configuratiescherm dat hieronder wordt gemarkeerd.
Met de gemaakte asserties kunnen testers de volgende zaken configureren vanuit de assertietoolbox.
| Keuze | Beschrijving |
| De geselecteerde Assertie schuift omhoog in de volgorde. | |
| De geselecteerde bewering wordt in de volgorde omlaag verplaatst. | |
| Verwijdert de geselecteerde bewering | |
| Configureer/bewerk de geselecteerde bewering opnieuw. |
Hieronder staan de functies die exclusief beschikbaar zijn in de Pro-versie. SoapUInu verzonden als ReadyAPIDe Pro-versie helpt ons ook bij het groeperen van beweringen, zodat we een extra validatielaag aan de gemaakte beweringen kunnen toevoegen.
- EN: Alle beweringen worden als geldig beoordeeld, wat resulteert in de groepsconditie 'geslaagd'.
- OF: Ten minste één van de beweringen binnen de groep moet GELDIG zijn om de groepsconditie PASSED te kunnen claimen.
- Pro-versie maakt het ook mogelijk Klonen van beweringenMet deze optie kunnen testers toestaan dat een bewering wordt gekopieerd naar een andere teststap in hetzelfde of een ander project.
- Asserties uitschakelen/inschakelen: Met deze optie kunt u elke gegroepeerde of niet-gegroepeerde assertie uitschakelen of inschakelen. Als een assertie is uitgeschakeld, wordt deze grijs weergegeven en worden uitgeschakelde asserties niet uitgevoerd wanneer een testcase wordt uitgevoerd.
- Asserties kunnen worden gedegroepeerd: Gegroepeerde asserties kunnen worden gedegroepeerd als testers dat wensen.
Volledige lijst met methoden die beschikbaar zijn in verschillende typen beweringen
De onderstaande tabel bevat alle hierboven besproken beweringen, gegroepeerd per categorie waaronder ze voorkomen in het dialoogvenster 'Bewering toevoegen'.
| Bevestigingsmechanisme | Beschrijving |
| EIGENDOM INHOUD | |
| Bevat | Zoekt naar het bestaan van de opgegeven tekenreeks. Het ondersteunt ook reguliere expressie. |
| Bevat niet | Zoekt naar het niet bestaan van de opgegeven tekenreeks. Het ondersteunt ook reguliere expressie. |
| XPath-wedstrijd | Gebruikt de XPath-expressie om het doelknooppunt en de bijbehorende waarden te selecteren. |
| XQuery-overeenkomst | Gebruikt een XQuery-expressie om inhoud uit de doeleigenschap te selecteren. |
| Naleving, status, normen | |
| HTTP Download alle bronnen | Valideert het HTML-document na het downloaden en geldt voor elke eigenschap die HTML bevat. |
| Ongeldige HTTP-status Codes | Controleert of het HTML-antwoord een statuscode bevat die niet in de lijst met gedefinieerde codes staat. |
| Geen SOAP-fout | Controleert of het laatst ontvangen bericht geen SOAP-fout is. Het is heel duidelijk dat dit alleen van toepassing is op SOAP-teststappen. |
| Naleving van schema's | Controleert of het laatst ontvangen bericht voldoet aan de standaardschemadefinitie van WSDL of WADL. Geldt voor SOAP- en REST-teststappen. |
| SOAP-fout | Controleert of het laatst ontvangen bericht een SOAP-fout is. Het is het omgekeerde van 'NIET SOAP'-foutbeweringen. |
| SOAP-reactie | Controleert of het laatst ontvangen antwoord een geldig SOAP-antwoord is en geldt alleen voor SOAP-testverzoekstappen. |
| Geldige HTTP-status Codes | Controleert of het HTML-antwoord een statuscode bevat die in de lijst met gedefinieerde codes staat. Het is het tegenovergestelde van 'Ongeldige HTTP-statuscode'. Codes' bewering. |
| WS-adresseringsverzoek | Controleert of het laatst ontvangen verzoek de juiste WS-Addressing Headers bevat. |
| WS-adresseringsreactie | Controleert of het laatst ontvangen antwoord de juiste WS-Addressing Headers bevat. |
| WS-beveiligingsstatus | Valideert of het laatst ontvangen bericht geldige WS-Security-headers bevat en geldt alleen voor SOAP-verzoeken. |
| Script | |
| Scriptbevestiging | Hiermee kunnen gebruikers een aangepast script uitvoeren om door de gebruiker gedefinieerde validaties uit te voeren. |
| SLA | |
| Reactie SLA | Valideert of de responstijd van het laatst ontvangen antwoord binnen de gedefinieerde limiet lag. |
| JMS | |
| JMS-status | Controleert of het JMS-verzoek van de teststap met succes is uitgevoerd en geldt voor teststappen met een JMS-eindpunt. |
| JMS-time-out | Controleert of de JMS-reactie van een teststap niet langer heeft geduurd dan de opgegeven duur. |
| Security | |
| Blootstelling aan gevoelige informatie | Controleert of het antwoordbericht geen gevoelige informatie over het doelsysteem openbaar maakt. We kunnen deze bewering gebruiken voor REST-, SOAP- en HTTP-teststappen. |
DOWNLOAD HET SOAPUI-PROJECT DAT BOVENSTAANDE BEWEGINGEN BEVAT
Veelvoorkomende fouten en probleemoplossing
De meeste beweringen mislukken tracWe komen terug op een klein aantal fouten, dus controleer deze voordat je een uitdrukking herschrijft.
- Gebruik de juiste naamruimte. De naamruimte moet de URL waar de webservice zich bevindt.
- Als er een fout optreedt tijdens de ontwikkelingping Gebruik in een script een bewering en vervolgens 'log.info' om de inhoud van de variabelen af te drukken.
- Als u niet het gewenste resultaat krijgt, controleer dan of er een geldige invoer in de aanvraag is meegegeven.
Bijvoorbeeld, in de valutaomrekenaar, als je 'intA' invoert als 'x', wat geen geheel getal is, geeft de uitvoer de foutcode 'SOAP-Client'. Dit betekent dat het probleem ligt bij de parameter die vanaf de clientzijde wordt doorgegeven. Het verzoek met de ongeldige waarde wordt eerst weergegeven.
Het antwoord geeft de foutcode terug in plaats van een resultaat, zoals hieronder weergegeven.
Zorg ervoor dat u de juiste syntaxis gebruikt bij het gebruik van XPath en XQuery-asserties. Gebruik GEEN punt (.) in plaats van een dubbele punt (:) bij het gebruik van de bovenstaande assertie. De syntaxis is //namespace:Tagname en NIET //namespace.tagname. Als u dit wel doet, kunt u een foutmelding krijgen zoals 'NO match in current response', zelfs als de tagnaam correct is.














































