通配符不适用于 SoapUI 中的 XQuery 断言
Wilcards not working for XQuery assertions in SoapUI
这是我的测试步骤之一的响应:
<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] 读取值
但是,由于它不一致,因此无法知道哪个节点包含总计。
谢谢。
去掉*两边的引号。正如您现在拥有的那样,它会失败,因为实际值为 "Total: 0.0 " 但您的预期值为 "Total: "0.0" "
如果您只想确保 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
您还需要去除属性值上的一些前导和尾随白色 space 字符,以确保匹配良好。
这是我的测试步骤之一的响应:
<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] 读取值 但是,由于它不一致,因此无法知道哪个节点包含总计。
谢谢。
去掉*两边的引号。正如您现在拥有的那样,它会失败,因为实际值为 "Total: 0.0 " 但您的预期值为 "Total: "0.0" "
如果您只想确保 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
您还需要去除属性值上的一些前导和尾随白色 space 字符,以确保匹配良好。