Wiki

Clone wiki

servicedomain-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.

  1. SOAP Response

  2. Not SOAP Fault

  3. Schema Compliance

  4. 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