XPath结果返回一个数组

时间:2017-11-21 14:19:58

标签: xml xpath groovy soapui ready-api

我最近升级到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]

请问最好的办法是什么?

1 个答案:

答案 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 进行尝试。