2010-05-27 21 views
5

我是SoapUI的新手,剛剛配置了一個非常簡單的MockService。是否可以操縱響應,以便針對特定請求動態構建響應的元素?如何在SoapUI中返回動態響應MockService

方案1:

請求:

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

響應:

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

方案2:

請求:

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

響應:

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

這是一個簡單的測試,我並不需要它做的比上述任何更多。我目前做的是得到我想要的結果如下,但是因爲我完全不瞭解這個我肯定有更好的選擇:

響應:

<response> 
    ${dynElement} 
</response> 

Groovy腳本:

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

我想你不是故意在示例的最後一行中將child_Text放在雙引號中。否則,變量child2Text永遠不會被讀取。 – 0x89 2010-11-23 19:17:39

+0

對不起,一個錯誤。我會更正 – Ross 2010-11-24 06:42:27

回答

2

我使用「canned responses」和xpath查詢來做到這一點。爲此,您將在模擬服務中設置一系列調度處理程序,以將請求與響應匹配。假設你有Request1,Request2,Response1,Response2。使用「查詢匹配」調度方法來匹配XPATH表達式。在該匹配上,返回所需的響應。即如果在xpath中找到ID1,則返回Canned Response1。

此外,PRO版本在XPATH方面做得非常好,所以您不必手動編寫代碼。即它可以查看點擊你想要觸發的事件(在你的情況下,ID1),併爲你建立XPATH表達式。我要求一個PRO許可證,就是基於此。目前正在等待預算...

國際海事組織,比搞清楚groovy更容易入門。

Chris

+0

謝謝克里斯,那就是我一直在尋找的東西。我喜歡設置'預設響應'的方法,XPath的東西似乎適用於我。到目前爲止,我對這個工具印象非常深刻。 – Ross 2010-06-04 08:43:46

3

而不是xpath,你也可以使用XmlSlurper。

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

無恥地從this question's答案撕開的,請不要傷害我。

相關問題