2010-05-27 8 views
5

Ich bin neu in SoapUI und haben nur einen sehr einfachen MockService konfiguriert. Ist es möglich, die Antwort so zu manipulieren, dass für eine bestimmte Anfrage die Elemente der Antwort dynamisch aufgebaut werden?So geben Sie dynamische Antwort in SoapUI MockService

Szenario 1:

Anfrage:

<record> 
    <identifier>ID1</identifier> 
</record> 

Antwort:

<response> 
    <child1>child 1</child1> 
</response> 

Szenario 2:

Anfrage:

<record> 
    <identifier>ID2</identifier> 
</record> 

Antwort:

<response> 
    <child2>child 2</child2> 
</response> 

Es ist für einen einfachen Test, und ich brauche es nicht mehr als die oben zu tun. Ich mache zur Zeit die folgenden, die die Ergebnisse Ich möchte ergibt aber da ich auf diese völlig neue bin ich bin sicher, es gibt bessere Alternativen:

Antwort:

<response> 
    ${dynElement} 
</response> 

Groovy Skript:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent) 
def reqRef = String.valueOf(holder.getNodeValue("//identifier")) 

def child1Text = "<child1>child 1</child1>" 
def child2Text = "<child2>child 2</child2>" 

if (reqRef == "ID1") { 
    context.setProperty("dynElement", child1Text) 
} else if (reqRef == "ID2") { 
    context.setProperty("dynElement", child2Text) 
} 
+0

Ich denke, Sie wollten nicht in der letzten Zeile des Beispiels doppelte Anführungszeichen um child2Text setzen. Ansonsten wird die Variable child2Text nie gelesen. – 0x89

+0

ja sorry, ein Fehler. Ich werde korrigieren – Ross

Antwort

2

Ich mache es mit "vorgefertigte Antworten" und XPath-Abfragen. Dazu richten Sie im Scheinservice eine Reihe von Dispatch-Handlern ein, um die Requests mit den Respes abzugleichen. Angenommen, Sie haben Request1, Request2, Response1, Response2. Verwenden Sie die Dispatch-Methode "Query Match", um einen XPATH-Ausdruck zu finden. Geben Sie bei dieser Übereinstimmung die gewünschte Antwort ein. Wenn Sie ID1 im xpath finden, geben Sie die vordefinierte Response1 zurück.

Auch die PRO-Version macht einen großartigen Job mit der XPATH, so dass Sie sie nicht von Hand programmieren müssen. h. es kann sich eine Antwort ansehen, klicken Sie auf die Sache, die Sie auslösen möchten (in Ihrem Fall ID1), und es erstellt den XPATH-Ausdruck für Sie. Ich habe eine PRO-Lizenz beantragt, nur basierend darauf. Derzeit wartet auf Budgetierung ...

IMO, viel einfacher zu beginnen, als herauszufinden, groovy.

Chris

+0

Danke Chris, das ist, was ich gesucht habe. Ich mag den Ansatz, "vorgefertigte Antworten" zu erstellen und das XPath-Zeug scheint für mich zu funktionieren. Ich bin sehr beeindruckt von diesem Tool bisher. – Ross

3

Statt XPath können Sie auch XmlSlurper verwenden.

def req = new XmlSlurper().parseText(mockRequest.requestContent) 
def reqRef = req.record.identifier 

Schamlos zerrissen von this question's Antworten, bitte tu mir nicht weh.