XPath 结果 returns 一个数组

XPath result returns an array

我最近升级到 SoapUI Pro (ReadyAPI),但遇到了以下问题。我有一个像这样的 XPath 断言:

declare namespace ns2='http://some.schema.tld/foo/bar/1.0';//ns2:GenerateOrResetPasswordFault//faultCode

它与我在 faultCode 元素中获得的特定值相匹配。然而,我在同一个父级中得到了其中两个,所以响应包含类似

的内容
//..
<GenerateOrResetPasswordFault>
    <faultCode>123</faultCode>
    <faultCode>456</faultCode>
</GenerateOrResetPasswordFault>
//...

我之前有两个断言,一个与 123 匹配,另一个相同的 XPath 与 456 匹配并且它有效。现在切换后断言失败,因为 XPath 实际上 returns [123,456] 作为结果。

请问最好的处理方法是什么?

这是实现相同目的的脚本断言。这样,您也不需要有多个 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')
}

您可以快速在线 demo 尝试给定的 xml 数据。