0

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

声明命名空间 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 实际上返回[123,456]结果。

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

4

1 回答 1

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')
}

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

于 2017-11-22T17:17:33.743 回答