是否有办法在一个测试步骤的一个断言中有多个预期结果。
宣告:
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*
的值进行比较,以便进行此特定测试步骤,如果有的话他们通过了测试步骤。
这可能吗?
答案 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,您可以像使用其他编程语言一样使用函数和运算符。