-
何為變量文件?
變量文件中包含了測試數據中的變量。雖然變量可以通過變量表格中創建, 或者通過命令行設置, 不過這些方法有所局限, 而變量文件可以動態地創建任意類型的變量。
變量文件一般由Python模塊實現, 有兩種不同的方法來創建變量:
1、方法一:直接創建變量
變量就是模塊的屬性。最簡單的情形下, 這種語法幾乎不需要真正的編程。 例如, MY_VAR = 'my value'
就創建了變量 ${MY_VAR}
, 后面是變量的值。
當使用變量文件時, 它們像Python的模塊一樣被導入, 其中的非下划線(_
)開頭的全局屬性均被視作變量。
變量的名字是不區分大小寫的, 通常推薦大寫字母用作全局變量和屬性。
1.1 示例1:
導入變量文件 myvar1.py
rf用例 test2:
執行結果:pass
2.2 示例2,使用下面的方式在變量表中創建 :
2.3 示例3,動態創建變量:
因為變量文件就是真正的編程語言, 其中幾乎可以包含任意的代碼邏輯來設置變量
2.4 示例4,與示例3類似,真實的代碼中的數據可以是來自數據庫, 或者外部文件, 甚至是要求用戶輸入。
rf用例:
執行結果pass:
選擇性的包含變量
當 Robot Framework 處理變量文件時, 這些文件(模塊)中所有的屬性只要不是以下划線開頭, 都會被視作變量, 這其中甚至包括函數或類, 不管是在文件中創建的還是從其它模塊導入的。例如, 上面最后一個例子中除了 ${AREA1}
和 ${AREA2}
這兩個我們預期的變量外, 最終還包含了 ${math}
和 ${get_area}
這兩個變量。
雖然通常情況下這些額外的變量不會造成什么問題, 但是它們有可能會無意覆蓋其它的變量名, 由此引發的錯誤將難以定位。推薦的做法是使用特殊屬性 __all__
, 將要作為變量暴露的屬性名放在列表中賦值給它。
rf用例:
執行結果fail:
2、方法二:通過特殊函數獲取變量
變量文件中可以包含一個特殊的函數 get_variables
(或者 getVariables
), 該函數將變量按字典的形式返回。該函數還可以接受參數, 所以這種方法非常靈活。
如果這個函數存在, Robot Framework將調用該函數, 並且預期返回的結果是Python的字典類型或者Java中的 Map
類型, 其中變量的名稱是鍵, 而值就是變量的值。
2.1 示例1:
rf用例:
執行方法一:
執行方法二:
執行方法三:
2.2 示例2:演示變量文件如何使用參數
在更真實的場景中, 這些參數可能是一個用來讀取參數的外部文件的路徑, 或者是數據庫的地址。:
get_variables
可以接受參數, 這樣可以很方便的改變實際要創建什么樣的變量。參數的數量和類型和普通的Python函數並無二致。當在測試數據中使用變量文件時, 調用參數跟在變量文件后面的表格里, 而在命令行中則通過冒號或分號和文件路徑分開。
示例:見另一篇博文介紹https://www.cnblogs.com/chengchengla1990/p/9890926.html
-
如何使用變量文件?
1、方法一:所有的測試數據文件都可以在設置表Setting中通過 Variables 來導入變量。
如果 變量文件可以接受參數, 這些參數跟在路徑后面的單元格中, 並且這些參數同樣可以使用變量。
注:變量文件中定義的所有變量在導入它的測試文件中都是可見的,如果同時導入了多個變量文件並且存在名稱沖突, 則最先導入的生效。此外, 通過變量表格和命令行方式設置的變量會覆蓋變量文件中的同名變量。
2、方法二:
通過命令行選項 --variablefile
來指定變量文件。選項后面跟着文件的路徑, 如果要傳遞參數的話, 使用冒號 (:
) 來分隔:
示例如下:
從Robot Framework 2.8.7版本開始, 還可以使用分號(;
)作為參數的分隔符. 這種情況對參數本身也包含冒號時特別有用. 不過需要注意, 在UNIX-like操作系統中, 要使用雙引號將整個選項值括起來:
這些變量文件中的變量在所有測試文件中全局可見, 這點和通過選項 --variable
來設置 單個變量 類似.
如果同時使用了 --variablefile
和 --variable
選項, 並且發生變量名沖突, 則使用 --variable
選項設置的變量勝出.