2017-05-03 28 views

回答

0

更多的信息會很好。儘管一見鍾情,但它看起來像是在尋找XQuery斷言。這不會排序或修改響應,但它會將斷言中的響應轉換爲使其與您控制的命令集合相匹配。

何時使用它?如果您不確定按哪種順序獲取實體,並且想要將那些動態分類的項目與固定集合匹配。

一個例子可以在這裏找到:http://readyapi.smartbear.com/structure/assertions/property/xpath/xquery/example

我會試着組成一個樣本項目的一些例子作爲參考。

但有一件事:不要停留在SoapUI站點的示例中。你可以堅持下去。您可以使用XPath檢索所有內容,您可以在XQuery中使用它。

例子:假設有一個XML從this source(有用的東西在這裏爲好,你要知道) - XQuery示例

<?xml version="1.0"?> 
<?xml-stylesheet href="catalog.xsl" type="text/xsl"?> 
<!DOCTYPE catalog SYSTEM "catalog.dtd"> 
<catalog> 
    <product description="Cardigan Sweater" product_image="cardigan.jpg"> 
     <catalog_item gender="Men's"> 
     <item_number>QWZ5671</item_number> 
     <price>39.95</price> 
     <size description="Medium"> 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
     </size> 
     <size description="Large"> 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
     </size> 
    </catalog_item> 
    <catalog_item gender="Women's"> 
     <item_number>RRX9856</item_number> 
     <price>42.50</price> 
     <size description="Small"> 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
     </size> 
     <size description="Medium"> 
      <color_swatch image="red_cardigan.jpg">Red</color_swatch> 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
     </size> 
     <size description="Large"> 
      <color_swatch image="navy_cardigan.jpg">Navy</color_swatch> 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
     </size> 
     <size description="Extra Large"> 
      <color_swatch image="burgundy_cardigan.jpg">Burgundy</color_swatch> 
      <color_swatch image="black_cardigan.jpg">Black</color_swatch> 
     </size> 
    </catalog_item> 
</product> 
</catalog> 

下,現在假設你不知道在哪個訂購這些東西到達。你知道測試數據本身非常穩定。這可能意味着這個查詢檢索的物品編號很可能是相同的。爲了我們的緣故,假設你想測試價格是預期價格。

這時你有兩種選擇: 1.爲每個項目單獨的XPath你期望 2.創建使用XQuery可驗證的查詢(你可以找到下斷言)

XQuery的例子:

<results> 
    { 
     for $item in //catalog/product/catalog_item 
     let $id := $item/item_number 
     let $price := $item/price 
     order by $id 
     return 
      <price itemId='{data($id)}'>{data($price)}</price> 
    } 
</results> 

此查詢的結果會是這樣:

<results> 
    <price itemId='QWZ5671'>39.95</price> 
    <price itemId='RRX9856'>42.50</price> 
</results> 

隨着線for $item in //catalog/product/catalog_item我て讓XQuery遍歷具有該地址的所有元素。可以使用變量 $item。這在這裏可能看起來是徒勞的,但在更復雜的情況下,模塊化是你的朋友。更進一步,我定義了更多的變量。你不必這樣做,但我喜歡更加冗長,而不是看不到我以後做了什麼(我是一個功能測試人員)。要分配變量,請使用語句let $id := $item/item_number。正如你所看到的,當我深入挖掘XML時,我重複使用了迭代的父代。

在執行某些功能時,我們需要使用'邊界'{}來定義函數。注意:檢索實際數據的功能是{data(variable with path or path here)}

實質上,你甚至不需要包含項目ID。您可以在一個值上進行定購,而不將其包含在返回的輸出中。我個人喜歡在我的設置中讓他們驗證以後的差異。

至於數字第一,然後是資本,那麼小盤,我不知道你是否使用了正確的工具。我相信這是可能的。但是,鑑於您可以相信SoapUI每次都以相同的方式對XQuery進行排序,因爲它每次都會使用相同的XQuery引擎,所以我無法想象,首先實際擁有數字,然後是大寫字母,然後是小帽子。目標是驗證從響應中獲得的排序集合。

本質上,爲了校準斷言,您需要使用模擬來提供預期輸出的示例XML。然後,在斷言配置屏幕中,您可以選擇使用您設計的Xquery從響應xml中獲得預期的輸出。

如果確實是你所描述的那種本質,那麼請詳細說明。

來源的XQuery:

體積大,還沒有完成,但可能是你的問題的核心解決方案:驗證始終排序響應與斷言原生於SoapUI。