SOAPUI中的Groovy在由预期数据定位的重复节点上断言

SOAPUI中的Groovy在由预期数据定位的重复节点上断言,groovy,soapui,Groovy,Soapui,下面是一个示例响应来解释我的场景 <ns2:Details xmlns:ns2="http://ww"> <ns2:Code>011</ns2:Code> <ns2:Result>4</ns2:Result> </ns2:Details> <ns2:Details xm

下面是一个示例响应来解释我的场景

              <ns2:Details xmlns:ns2="http://ww">
                 <ns2:Code>011</ns2:Code>
                 <ns2:Result>4</ns2:Result>
              </ns2:Details>
              <ns2:Details xmlns:ns2="http://ww">
                 <ns2:Code>018</ns2:Code>
                 <ns2:Result>0</ns2:Result>
              </ns2:Details>
              <ns2:Details xmlns:ns2="http://ww">
                 <ns2:Code>098</ns2:Code>
                 <ns2:Result>2</ns2:Result>
              </ns2:Details>

011
4.
018
0
098
2.
这里我感兴趣的测试数据包含在
ns2:Result
中。我已经知道在该节点中需要什么值,但它必须与正确的
ns2:code
值相关联

例如,我希望通过这次测试

  • 结果为4时,预计
    代码011
  • 结果为0时,预期
    代码018
    ,依此类推

所以我已经知道的数据是代码和结果,但我需要确保为每个代码返回正确的结果值。我不需要验证返回的代码是什么,我只需要根据正确的代码验证结果数字。

创建一个预期结果作为映射,如下所示,它是代码和结果的组合,以便两者可以一起验证/断言

['011': '4', '018': '0', '098': '2']
对同一请求测试步骤使用脚本断言

下面是脚本:

//assert if there is response
assert context.response, 'Response is null or empty
//change below map as needed
def expected = ['011': '4', '018': '0', '098': '2']
def xml = new XmlSlurper().parseText(context.response)
def actual = xml.'**'.findAll{it.name() == 'Details'}.collectEntries{[(it.Code.text()): it.Result.text()]}
assert expected == actual

马特,请检查一下解决方案,看看能不能解决。这很好。(再次)谢谢你。唯一的问题是context.response的断言似乎使测试失败。如果我注释掉那一行,它会正常工作。@Matt,如果你已经运行了服务,它会正常工作,因为没有响应而失败,如果你也能更新以前接受的答案,请感激。服务已经运行了。没问题,我会仔细看一下。我认为这更像是一个安全网,可以捕获非响应,而不是真正的数据失败。我现在就投你的另一张。再次感谢,这真的帮助了我的旅程。