我最近升级到SoapUI Pro(ReadyAPI)并且我遇到了以下问题。我有一个像这样的XPath断言:
声明命名空间ns2 =' http://some.schema.tld/foo/bar/1.0&#39 ;; // ns2:GenerateOrResetPasswordFault // faultCode
它与我在faultCode
元素中获得的特定值匹配。然而,我在同一个父中得到其中两个,所以响应包含类似
//..
<GenerateOrResetPasswordFault>
<faultCode>123</faultCode>
<faultCode>456</faultCode>
</GenerateOrResetPasswordFault>
//...
我之前有两个断言,一个与123
匹配,另一个与同一XPath匹配,与456
匹配,并且有效。现在切换断言失败后,因为XPath实际上返回了[123,456]
。
请问最好的办法是什么?
答案 0 :(得分:2)
这是实现相同的脚本断言。这样,您也不需要多个xpath断言。
脚本断言:按照内嵌评论
//Check if the response is ok
assert context.response, 'Response is empty or null'
//Define your expected fault codes
def expectedCodes = [123, 456]
def actualCodes = []
if (context.response.contains('faultCode')) {
//Get the actual fault codes from xml response by parse and find
actualCodes = new XmlSlurper().parseText(context.response).'**'.findAll {it.name() == 'faultCode' }*.text() as Integer[]
log.info "Actual fault codes are : ${actualCodes}"
//Check both expected and actual are matching
assert expectedCodes.sort() == actualCodes.sort()
} else {
throw new Error('Response does not contain faultCode elements')
}
对于给定的xml数据,您可以快速在线 demo 进行尝试。