Wiki
Clone wikiservicedomain-test-framework / Assertions
Generellt
För varje teststeg bör det finnas ett antal assertions som kontrollerar svaret. SoapUI har inbyggda assertions för de mest grundläggande kontrollerna och i stödbiblioteket soapui-support finns hjälpmetoder för att kontrollera fler saker.
Följande assertions bör generellt finnas med i varje teststeg.
-
SOAP Response
-
Not SOAP Fault
-
Schema Compliance
-
Assert Schematron (Script, se nedan)
Utöver detta kan det finnas en eller flera assertions specifika för testfallet.
#Script assertions med soapui-support#
Fullständig API-dokumentation finns på https://rivta-tools.bitbucket.io/soapui-support/groovydoc
Nedan följer exempel på användning.
Schematron-validering
För vissa affärsregler räcker det inte att använda XML Schema, och då är rekommendationen att skapa Schematron-regler som kan validera meddelanden ytterligare. För att hitta de konstruktioner där Schematron behövs får man jämföra Schema-definitionen av kontraktet med dess fältregler och se om det finns avvikande definitioner. De områden där Schematron kan hjälpa till handlar oftast om regler som anger att "om fält A har ett värde får inte fält B anges". Mer information om Schematron finns på http://www.schematron.com/.
Med nedanstående exempel kontrolleras Schematron-villkor för hela meddelandet. Bör som regel vara med i alla testfall för att täcka in alla varianter på svar.
#!groovy import se.skl.rivta.tksupport.soapui.ContentAssertions def ca = new ContentAssertions(context, messageExchange, log) ca.assertSchematronConstraints()
Kontroller av informationsposter
Dessa kontroller utgår ifrån att meddelandet innehåller noll till många informationsposter (records). Vad en post är definieras i som project properties som en xPath. Där ska även namespaces definieras för att kunna användas i assertions senare.
Property | Exempel på värde |
---|---|
RecordElementPath | //urn:careContact |
xmlns:urn | urn:riv:clinicalprocess:logistics:logistics:GetCareContactsResponder:3 |
xmlns:urn1 | urn:riv:clinicalprocess:logistics:logistics:3 |
Därefter kan man använda följande metoder för att göra kontroller kopplade till informationsposter. Exempel:
#!groovy import se.skl.rivta.tksupport.soapui.ContentAssertions def ca = new ContentAssertions(context, messageExchange, log) ca.assertElementExistsInAnyRecord('/urn:careContact/urn1:careContactHeader/urn1:accountableHealthcareProfessional/urn1:healthcareProfessionalCareGiverHSAId')
Kontroll av elementinnehåll
Dessa kontroller används för att verifiera komplext innehåll i element. Exempel:
#!groovy import se.skl.rivta.tksupport.soapui.ContentAssertions def ca = new ContentAssertions(context, messageExchange) ca.assertBase64InAnyRecord('/urn:careDocumentation/urn1:careDocumentationBody/urn1:clinicalDocumentNote/urn1:multimediaEntry/urn1:value', context.outputFileName, 100000)
Updated