这是我测试步骤之一的响应:
<Names>
<NameList PropertyName="Record">
<Names>
<SimpleValue Value=" Date: MM/DD/Year "/>
<SimpleValue Value="Name: John "/>
<SimpleValue Value="Amount: 1234"/>
<SimpleValue Value="Change: 2.0 "/>
<SimpleValue Value="Total: 0.0 "/>
</Names>
</NameList>
</Names>
我期望我的Xquery断言中的确切匹配,除了说总数的值。
这就是我的断言的样子:
<Names>
<NameList PropertyName="Record">
<Names>
<SimpleValue Value=" Date: MM/DD/Year "/>
<SimpleValue Value="Name: John "/>
<SimpleValue Value="Amount: 1234"/>
<SimpleValue Value="Change: 2.0 "/>
<SimpleValue Value="Total:"*""/>
</Names>
</NameList>
</Names>
我已经检查了我的Xquery表达中的通配符,但这似乎在Soapui中没有工作。有解决方法吗?
注意:响应顺序不一致,因此无法使用XPath。可以从SimpleValue节点SimpleVale [1],SimpleValue [5]读取值但是,由于它不一致,因此无法知道哪个节点包含总。
谢谢。
如果您只想确保存在Value="Total"
并且不在乎它可能具有什么值,则可以使用SimpleValue[contains(@Value, "Total:")]
,只需检查属性名称即可。例如:
(: Replace these variables with values extracted from the soapUI response:)
declare variable $date := "MM/DD/Year";
declare variable $name := "John";
declare variable $amount := "1234";
declare variable $change := "2.0";
for $NameList in //<soapUI response payload>//NameList
let $Names := $NameList/Names
where $Names/SimpleValue[@Value = concat("Date: ", $date)] and
$Names/SimpleValue[@Value = concat("Name: ", $name)] and
$Names/SimpleValue[@Value = concat("Amount: ", $amount)] and
$Names/SimpleValue[@Value = concat("Change: ", $change)] and
$Names/SimpleValue[contains(@Value, "Total:")]
return $NameList
您还需要在属性值上剥离一些领先和尾随的白空间字符,以确保您获得了良好的匹配。
删除周围 *的引号。如您现在所拥有的,它将失败,因为实际值为"总数:0.0",但您的期望值为"总数:" 0.0"