SoapUI:在一个断言中有多个预期结果

时间:2016-10-07 10:45:53

标签: xml xpath soapui assertions

是否有办法在一个测试步骤的一个断言中有多个预期结果。

宣告:

declare namespace b="base"; //b:policies/b:policy/b:total-premium

预期结果:

7.362*

XML断言代码:

<con:assertion type="XPath Match" id="" name="XPath Match">                                             
<con:configuration>                                             
<path>                                              
declare namespace b="base"; //b:policies/b:policy/b:total-premium                                               
</path>                                             
<content>7.362*</content>                                               
<allowWildcards>true</allowWildcards>                                               
<ignoreNamspaceDifferences>false</ignoreNamspaceDifferences>                                                
<ignoreComments>false</ignoreComments>                                              
</con:configuration>                                                
</con:assertion>                                                
<con:credentials>                                               
<con:authType>No Authorization</con:authType>                                               
</con:credentials>                                              
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>                                               
<con:jmsPropertyConfig/>                                                
<con:wsaConfig mustUnderstand="NONE" version="200508" action="" addDefaultTo="true"/>   

我希望SoapUI要做的是将total-premium的值与此7.362*6.994*7.730*的值进行比较,以便进行此特定测试步骤,如果有的话他们通过了测试步骤。

这可能吗?

2 个答案:

答案 0 :(得分:2)

这样做的一种可能方法是使用Script assertion代替Xpath match assertion

Script assertion中,您可以解析响应,获取节点值并与可能值列表进行比较,如:

// get the xml response
def response = messageExchange.getResponseContent() 
// parse it
def xml = new XmlSlurper().parseText(response)
// find your node by name
def node = xml.'**'.find { it.name() == 'total-premium' }
// assert against the possible values
assert ['7.362*','6.994*','7.730*'].contains(node.toString())

更新

我一开始误解了你的问题我认为你想要确切地检查7.362*,真的是通配符是任何数字,对不起。然后,您可以使用带有matches()方法的正则表达式来检查您的值是否以某些所需值开头:

// get the xml response
def response = messageExchange.getResponseContent() 
// parse it
def xml = new XmlSlurper().parseText(response)
// find your node by name
def node = xml.'**'.find { it.name() == 'total-premium' }
// assert 
assert node.toString().matches("(7.362|6.994|7.730)\\d*")

答案 1 :(得分:2)

如果您更喜欢XPath而不是Groovy脚本,您仍然可以使用简单的XPath表达式:

declare namespace b="base";

starts-with(//b:policies/b:policy/b:total-premium, '7.362') or 
starts-with(//b:policies/b:policy/b:total-premium, '6.994') or 
starts-with(//b:policies/b:policy/b:total-premium, '7.730')

预期结果是 true

使用XPath,您可以像使用其他编程语言一样使用函数和运算符。