2017-09-28 105 views
1

我正在編寫一個Groovy腳本斷言,它正在驗證以前的JDBC響應步驟中的值與SOAP響應中包含的值之間的值。SOAPUI方括號引起我的實際結果導致斷言失敗

當我運行我的腳本時,我可以看到兩個值回來了,但實際結果值(來自SOAP響應)被方括號包圍,這反過來使得斷言失敗。我猜這是一個字符串,而不是一個?

如何從實際結果中去掉方括號或者將它們添加到預期的結果值中以確保斷言通過?

下面是我的斷言腳本。

預期的結果是001 實際結果是[001]

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent) 
def pxml = new XmlSlurper().parseText(context.response) 

//grab the expected result from jdbc response 
def expectedCodes = context.expand('${JDBC Request#ResponseAsXml#//*:TW304_PRODHIST.PRODUCT_1}') 

//grab the actual result from the SOAP response 
def actualCodes = pxml.'**'.findAll{it.name() == 'CurrHospProductCode'}*.text() 

assert expectedCodes == actualCodes 

log.info expectedCodes 
log.info actualCodes 

回答

2

因爲你期待單個值按預期在那裏作爲你正在與它單個元件的陣列。

你可以做到這一點,如下如果這是正確的:

assert expectedCodes == actualCodes[0] 

在一個側面說明,你可能只檢查仔細,你真的希望單個值或有可能得到的值的列表。

編輯:根據您的腳本。 findAll爲您提供列表結果。如果您期望xml中有單個元素,那麼您可以將其更改爲find,然後您的實際代碼應該按原樣運行。

+0

謝謝你饒。您對添加[0]的初始回覆確實使測試通過,這非常棒。我也嘗試用'find'替換'findAll',但在那裏存在相同的問題。但我可以根據您的初始答案將其標記爲現在回答。 – Matt

+0

這是因爲'text()'之前的'*'。如果使用'find','*'也可以被刪除。 – Rao

+0

是的,你是對的。一切都有道理。再次感謝您回答我的問題。 – Matt