Robot Framework - Variable file
RF導入變量文件
在Setting中導入
Setting中導入變量文件時,和導入外部資源文件類似。變量文件的路徑可以包含參數,如果一個變量文件接受參數,那么它們也可以是變量。
Path最好使用相對路徑,如下:
*** Settings *** Resource ../../eRes.txt Variables ../test.py Variables ../comVar.py product ${arg2} Variables ${RESOURCES}/common.pyRide 中導入變量文件:
Ride how to import variable file
命令行導入
pybot --help 查看相關幫助信息如下:
從命令行導入的Varialbe File,作用域范圍是全局可用的。注意,pybot -v 是導入變量,pybot -V 才是導入變量文件。如果通過 pybot -v 和 pybot -V 創建的變量名存在沖突,則pybot -v選項創建的變量將會被保留。
如果變量文件需要參數,則可以使用冒號來分隔path和params。如果在Winodws系統中使用絕對路徑導入變量文件,則驅動器號后面的冒號不會被認為是一個分隔符:如下:
pybot --variablefile /relative_path/variables.py #相對路徑 pybot -V /absolute_path/common.py #絕對路徑 pybot -V C:\path\variables.py #絕對路徑 pybot -V ../common.py:product #變量文件有一個參數 pybot -V needTwoParams.py:arg1:arg2 #變量文件有多個參數 pybot -V "../common.py:product" -V "../test.py" #導入多個變量文件 powershell如果多個文件導入時存在變量重名的情況,則最先導入的變量有效 。
創建變量文件
直接創建
基本語法
在變量文件中直接給變量賦值,語法非常簡單,變量名大小寫不敏感。
# -*- coding: utf-8 -*- # python pyuser = 'Brian' # 在RF中等同于:${pyuser} |Set Variable |'Brian' pytags = ["大宗商品","供應鏈金融",'2C電商'] # list pyparams = {'username':'Brian','passwd':'20171219'} _pykey = "f007688f401311e782617cd30ab49afc" __all__ = ['pyuser','pytags'] #變量名需要加引號RF中的寫法:
#rf中的寫法log many ${pyuser} ${pytags} ${pyparams}${pytags} Evaluate '${pytags}'.decode('utf8')${type_pyuser} Evaluate type($pyuser)${type_pytags} Evaluate type($pytags)${type_pyparams} Evaluate type($pyparams) Ride log補充幾點:
使用對象最為變量的值
變量文件中的變量不限于只有字符串或其他基本類型作為值。相反,它們的變量可以包含任何對象。在下面的示例中,變量$ {MAPPING}包含一個具有兩個值的Java Hashtable(這個示例只在Jython上運行測試時才起作用)。
from java.util import HashtableMAPPING = Hashtable() MAPPING.put("one", 1) MAPPING.put("two", 2)第二個示例創建了$ {MAPPING}作為Python字典,并且還包含兩個從同一個文件中實現的自定義對象創建的變量。
MAPPING = {'one': 1, 'two': 2}class MyObject:def __init__(self, name):self.name = nameOBJ1 = MyObject('John') OBJ2 = MyObject('Jane')動態創建變量
由于Variable File本質上是編程語言進行變量的創建,所以可以達到動態創建變量的效果。
import os import random import time import datetime PATH = os.getcwd() #獲得當前路徑 RANDOM_INT = random.randint(0,9999) #random integer in range [0,9999] CURRENT_TIME = time.time() # 1513661957.0591035 NOW = datetime.datetime.now() #2017-12-19 YEAR = NOW.year MONTH = NOW.month HOUR = NOW.hourRF中打印變量的值如下:
rf log
YAML語法
變量文件也可以YAML文件實現。官方例子如下:
string: Hello, world! integer: 42 list:- one- two dict:one: yksitwo: kaksiwith spaces: kolme #RF中的寫法 *** Variables *** ${STRING} Hello, world! ${INTEGER} ${42} @{LIST} one two &{DICT} one=yksi two=kaksi使用特殊函數
如果在Variable File中存在特殊函數(getVariables、get_variable),可以通過特殊函數來得到變量,此機制使得變量的創建變的非常靈活。
如果特殊函數存在,RF框架會調用此函數來獲取函數。 函數的預期返回應該是Python的dict 或者 Java的Map, 其中key為Variable名稱, value為Variable值。 其他規則和直接創建變量的情形一樣:,既可以創建scalar, list, dict各種類型的變量,也支持特殊前綴"LIST__" 和 "DICT__"等。
# -*- coding: utf-8 -*-def getVariables(env = 'test'):if env == 'product':#production environmentDICT__variables = {"dbPort" : "3308","dbUser": "qt_product","dbPasswd" : "qt_product",}else :#test environmentDICT__variables = {"dbPort" : "3309","dbUser": "qt_test","dbPasswd" : "qt_test",}#全局變量,不區分運行環境globalvars = {'projectID':'3456','userID':'6'} DICT__variables['globalvars'] = globalvars #RF中取值用${globalvars['userID']}return DICT__variables如果在RF中引入該Variable file文件時不輸入參數,則變量的值打印結果為:
如果輸入參數product,則變量的值打印結果為:
切換運行環境
一般來說,自動化測試的用例不僅只在測試環境運行,可能情況下有三套運行環境:測試環境、灰度環境(沙盒/預發布)、生產環境。調試或者輔助驗證測試時,切環境改變量甚是麻煩。這些變量包括但不限于:一些url信息,數據庫信息,預置用戶信息等等。
對應以上需求,提供以下解決思路。
第一種思路是按照運行環境,把變量寫入不同的變量文件。說測試環境的用到的變量寫入testVars.py,生產環境下的變量寫入productionVars.py,運行時根據環境pybot -V導入文件。
第二種思路是使用特殊函數,在一個文件中創建所有環境下需要的變量,函數入參為測試環境,默認參數為test,變量文件樣例在上面已經給出了。
最后,我們來探討一下,所謂的RF的全局變量,想要只在用例里改變它的值,并且后續用例里用改變后的值,提供思路:通過變量文件,利用字典update方法將改變內存里的值的特性。
如上面的例子中,變量文件中定義了一個變量projectID:
globalvars = {'projectID':'3456','userID':'6'} DICT__variables['globalvars'] = globalvars下圖中兩個suite 文件Test1和Test2都導入了該變量文件,在Test1下的case1中更新該變量的值,在Test2的case2下,它的值還是6666,如果再次用update的方法更新時,后續所有的Case中的值都會是更新后的值。如此,達到用例中間變更變量后續可用的目的。
參考文檔
- rf變量進階--變量文件的使用,環境快捷切換等
,雪霽 - 其他測試框架 測試開發之路----框架中數據的管理策略
- robot framework - variable file
- 《我的RobotFramework書》,1-6-2 變量文件, Vairable Files
總結
以上是生活随笔為你收集整理的Robot Framework - Variable file的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沉淀2017,勇闯2018
- 下一篇: git常用命令2