在SOAPUI

时间:2017-06-13 05:42:26

标签: groovy soapui

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>

1 个答案:

答案 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,上面是脚本断言的独立代码,不需要您现有的代码。