Wilcards不在SoapUI中为XQuery断言工作

时间:2015-05-07 15:11:45

标签: xpath groovy xquery soapui assertions

这是我的一个测试步骤的响应:

   <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。

感谢。

2 个答案:

答案 0 :(得分:2)

如果您只想确保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

您还需要在属性值上删除一些前导和尾随空白字符,以确保匹配良好。

答案 1 :(得分:0)

删除*周围的引号。正如你现在所做的那样,它会失败,因为实际值是“总数:0.0”但你的期望值是“总计:”0.0“”