1.1.1 Property Transfer
創建或雙擊現有的Property-Transfer TestStep將打開以下窗口:
左側的列表顯示了此TestStep中配置的傳輸,添加和管理所需的數量。 選擇傳輸時(如上圖截圖中的“result”),右側的區域允許您根據需要進行配置;
- 頂部的源區域指定源屬性和可選的XPath用於傳輸
- 目標區域指定目標屬性和可選的XPath進行傳輸
- 下面的區域將不同的配置選項設置在傳輸級別上。
底部的傳輸日志顯示窗口打開時的最新執行傳輸及其實際傳輸的值。
可用的配置選項可以大大改變傳輸的內容,並將其各自的定義為:
- Fail transfer on error -嘗試執行轉移時發生任何錯誤時,轉移步驟將失敗
- Transfer text content -只會傳送文字內容。 不會保留結構元素
- Transfer to all -匹配的值將被轉移到所有的目標位置,以防多個匹配
- Entitize transferred values -這些值將具有某些字符,例如&符號(“&”)替換為相應的字符實體值(“&”)
- Set null on missing source -如果源資源丟失,目標將設置為null。 這意味着如果目標已經有一個值,它將丟失
- Ignore empty/missing values -這意味着如果源的匹配值為空或丟失,則它將被忽略,並且目標值保持不變
- Use XQuery - SoapUI將假定源是XQuery而不是默認的XPath,當嘗試提取源值時
- Transfer child nodes - SoapUI不會嘗試從匹配的源節點進行任何文本提取,而是選擇匹配節點的子節點,從而保留子樹XML結構
1.1.1.1 Transfer Execution
當在TestCase運行期間執行PropertyTransfer TestStep時,通過選擇傳輸源步驟,屬性和可選XPath/JSONPath表達式指定的屬性來執行屬性傳輸中的每次傳輸,並使用以下命令將其值復制到目標步驟指定的屬性可選的XPath/JSONPath表達式。 如果指定了XPath/JSONPath表達式,soapUI將嘗試用源節點替換目標節點,如果它們的類型相同。 如果沒有(例如,將text()分配給@attribute),soapUI將盡可能復制該值。
源和目標XPath/JSONPath表達式都必須指向其各自屬性中的現有節點,源屬性顯然需要節點,以便可以選擇,目標屬性需要節點才能被找到並覆蓋。
如果由於任何XPath/JSONPath表達式的匹配丟失而導致任何傳輸失敗,則打印錯誤,並且步驟將失敗或繼續,具體取決於該傳輸選擇了“失敗錯誤”選項。 如果TestCase的“Fail on error”選項已按照TestCase Options所述設置,TestCase的執行將被中止。
1.1.1.2 一個例子:將版本號從響應轉移到以下請求
假設我們有一個查詢服務,返回一個隨后要用於刪除的版本號; 屬性轉移非常適用於提取版本號並將其寫入可以由所有所需TestStep引用的屬性。 開始了:
- 將查詢請求添加並執行到一個空的TestCase,以便您有一個有效的響應來處理;
- 請求后創建Property-Transfer TestStep,並向其中添加屬性傳輸;
- 將源屬性配置為“查詢請求的響應”,然后在源屬性工具欄右側選擇“向導”按鈕。 這將打開一個方便的向導,用於選擇要傳輸的所需源節點(在標准soapUI中,您將必須手動創建生成的JSONPath語句)。
- 選擇節點並按OK; soapUI為您生成相應的JSONPath語句;
現在,所有的源都設置完成,下一步是配置屬性轉移的目標,即應寫入的位置。 有兩個選擇;
- 將其寫入可以由需要使用version_seq的所有后續測試步驟引用的臨時屬性。 如果我們要在幾個地方使用version_seq或者TestSteps,這是最好的解決方案
- 將其直接傳輸到應該使用該值的目標TestStep。 如果只想在一個地方使用該值,這將更容易
1.1.1.2.1 寫入臨時屬性
將屬性保存到我們使用名稱“version_seq”定義的測試用例屬性;
現在當執行時,version_seq被轉移到指定的TestCase屬性,並且可以稍后在通過標准屬性擴展(或另一個屬性轉移)的任何請求中使用。
1.1.1.2.2 直接寫入所需的目標TestStep
這更直接; 將目標設置為注銷請求,並再次使用JSONPath向導(或JSONPath技術)創建目標JSONPath語句;
現在執行此操作時,源目標值將從響應中直接提取並寫入請求消息。