在 SOAPUI 中用 groovy 断言
Assert with groovy in SOAPUI
Groovy 的新手和整体编码的新手,但我正在尝试所以请多多包涵。如果我不这样做,请提前致歉,但要详细说明我在这里要实现的目标!
我正在 SOAPUI 中为 SOAP 调用编写脚本测试,该调用具有相同名称的多个实例 node ("//ns2:AddOnCode")。我在该节点的实例中期望 return 值的预期结果。
到目前为止,我已经创建了以下内容,它仅在所有这些值都存在时才通过。但我想更进一步,如果此节点 return 具有我未定义的值,则测试失败。
因此,如果说所有这 5 个值 returned,还有第 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>
你没有正确使用。
更改自:
assert holder["//ns2:AddOnCode"].contains('029')
收件人:
assert holder.getNodeValue("//ns2:AddOnCode").contains('029')
编辑:根据 OP 评论,存在重复节点。
由于 OP 使用 Script Assertion,下面是脚本
它需要 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,以上是 Script Assertion 的独立代码,不需要您现有的代码。
Groovy 的新手和整体编码的新手,但我正在尝试所以请多多包涵。如果我不这样做,请提前致歉,但要详细说明我在这里要实现的目标!
我正在 SOAPUI 中为 SOAP 调用编写脚本测试,该调用具有相同名称的多个实例 node ("//ns2:AddOnCode")。我在该节点的实例中期望 return 值的预期结果。
到目前为止,我已经创建了以下内容,它仅在所有这些值都存在时才通过。但我想更进一步,如果此节点 return 具有我未定义的值,则测试失败。
因此,如果说所有这 5 个值 returned,还有第 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>
你没有正确使用。
更改自:
assert holder["//ns2:AddOnCode"].contains('029')
收件人:
assert holder.getNodeValue("//ns2:AddOnCode").contains('029')
编辑:根据 OP 评论,存在重复节点。
由于 OP 使用 Script Assertion,下面是脚本
它需要 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,以上是 Script Assertion 的独立代码,不需要您现有的代码。