Groovy的新手以及整体编码方面的新手,但我一直在尝试,请耐心等待。如果我不知道我在这里想要实现的目标的详细信息,请提前道歉!
我正在SOAPUI中为SOAP调用编写脚本测试,该调用具有相同名为节点的多个实例(" // ns2:AddOnCode")。我期望在这个节点的实例中我期望返回什么值的结果。
到目前为止,我创建了以下内容,只有在所有这些值都存在的情况下才会通过。但是我想更进一步,如果返回的节点没有我定义的值,那么测试就会失败。
因此,如果说所有这5个值都返回了,而且还有第6个//ns2:AddOnCode
值,那就说' 999'然后我想让这个测试失败。
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( messageExchange.responseContent )
assert holder["//ns2:AddOnCode"].contains('029')
assert holder["//ns2:AddOnCode"].contains('030')
assert holder["//ns2:AddOnCode"].contains('040')
assert holder["//ns2:AddOnCode"].contains('083')
assert holder["//ns2:AddOnCode"].contains('105')
以下是我的回复。您可以看到有各种AddOnCode实例,这些是我在测试中的相关内容。上面的断言成功传递,因为响应中存在所有这五个,但我需要添加一个步骤来查找不在断言值列表中的任何其他AddOnCode值。
<ns2:AddOnService>
<ns2:AddOnCode>029</ns2:AddOnCode>
<ns2:AddOnDesc>OVERPAYMENT</ns2:AddOnDesc>
</ns2:AddOnService>
<ns2:AddOnService>
<ns2:AddOnCode>030</ns2:AddOnCode>
<ns2:AddOnDesc>REWARDS POOL</ns2:AddOnDesc>
</ns2:AddOnService>
<ns2:AddOnService>
<ns2:AddOnCode>040</ns2:AddOnCode>
<ns2:AddOnDesc>NON URGENT</ns2:AddOnDesc>
</ns2:AddOnService>
<ns2:AddOnService>
<ns2:AddOnCode>083</ns2:AddOnCode>
<ns2:AddOnDesc>EXGRATIA</ns2:AddOnDesc>
</ns2:AddOnService>
<ns2:AddOnService>
<ns2:AddOnCode>105</ns2:AddOnCode>
<ns2:AddOnDesc>MISC NON CLAIMABLE</ns2:AddOnDesc>
</ns2:AddOnService>
</ns2:AddOnServices>
答案 0 :(得分:1)
您使用不正确。
改变自:
assert holder["//ns2:AddOnCode"].contains('029')
要:
assert holder.getNodeValue("//ns2:AddOnCode").contains('029')
编辑:基于OP评论,有重复的节点。
由于OP使用的是脚本断言,因此下面是脚本
需要expectedCodes
作为输入并检索actualCodes
并比较两者,如果不匹配则失败。
//Please edit if needed
def expectedCodes = ['029', '030', '040', '083', '105']
def pxml = new XmlSlurper().parseText(context.response)
def actualCodes = pxml.'**'.findAll{it.name() == 'AddOnCode' }*.text()
assert expectedCodes.sort() == actualCodes.sort()
注意:Matthew,上面是脚本断言的独立代码,不需要您现有的代码。