資源和變量文件
用戶關鍵字和變量 測試用例文件 和 測試套件 初始化文件只能用於文件在哪里 了,但 資源文件 提供一種機制來分享它們。 自 資源文件結構非常接近測試用例文件,它是 容易創建它們。
變量的文件 提供一個強大的機制來創建和分享 變量。 例如,他們允許字符串和之外的值 啟用動態創建變量。 他們的靈活性來自 他們創建使用Python代碼,這也使得 他們更復雜得多表變量 。
資源文件
考慮到資源文件使用
資源文件導入使用 資源 設置在 設置表。 資源文件的路徑在細胞中 設置后的名字。
如果路徑中給出了一個絕對的格式,它是直接使用。 在其他 情況下,首先搜索相對資源文件的目錄 導入文件的位置。 如果文件沒有找到, 然后從Python的目錄搜索 模塊搜索路徑 。 路徑可以包含變量,並推薦使用他們的路徑 系統(例如, $ {資源} / login_resources.html 或 $ { RESOURCE_PATH } )。 另外,斜杠( /
)的路徑 將自動改為反斜杠( \ 在Windows上)。
*** Settings *** Resource myresources.html Resource ../data/resources.html Resource ${RESOURCES}/common.tsv
用戶關鍵字和變量定義在一個資源文件 可用的文件,資源文件 使用。 同樣也在所有的關鍵字和變量可用 庫、資源文件和變量文件導入的說 資源文件。
資源文件結構
資源文件的高級結構是一樣的 當然,否則測試用例文件,但是他們不能包含測試 例表。 此外,在資源文件可以設置表 只包含進口設置( 圖書館 , 資源 , 變量 ), 文檔 。 變量表和 使用關鍵字表完全相同的方法在測試用例文件。
如果一些資源文件用戶具有相同名稱的關鍵字,他們 必須使用的嗎 關鍵字名稱前綴與資源 文件名稱 沒有擴展(例如, myresources.Some 關鍵字 和 常見的。 一些關鍵字 )。 此外,如果一些資源 文件包含相同的變量,一個是第一次進口 考慮使用。
記錄資源文件
關鍵字在一個資源文件可以創建 記錄 使用 (文檔) 設置。 資源文件本身 文檔 設置表中同樣 測試套件 。
這兩個 Libdoc 和 騎 使用這些文件,他們 天生對任何人打開資源文件可用。 的 第一行的文檔關鍵字記錄當它運行時, 否則測試期間的資源文件文件將被忽略 執行。
資源文件示例
*** Settings *** Documentation An example resource file Library Selenium2Library Resource ${RESOURCES}/common.robot *** Variables *** ${HOST} localhost:7272 ${LOGIN URL} http://${HOST}/ ${WELCOME URL} http://${HOST}/welcome.html ${BROWSER} Firefox *** Keywords *** Open Login Page [Documentation] Opens browser to login page Open Browser ${LOGIN URL} ${BROWSER} Title Should Be Login Page Input Name [Arguments] ${name} Input Text username_field ${name} Input Password [Arguments] ${password} Input Text password_field ${password}
變量文件
變量文件包含 變量 在測試中,可以使用 數據。 變量也可以使用變量創建表或設置 命令行,但變量文件允許動態地創建它們 和他們的變量可以包含任何對象。
變量文件通常作為Python模塊和實現 兩種不同的方法來創建變量:
- 創建變量直接
-
變量指定為模塊屬性。 在簡單的情況下, 語法非常簡單,不需要真正的編程。 例如,
MY_VAR = '我的價值
創建一個變量$ { MY_VAR }
與指定的文本值。 - 得到特殊函數的變量
-
變量可以有一個特殊的文件
get_variables
(或getVariables
作為一個映射)方法,它返回變量。 這種方法,因為方法可以把參數是非常靈活的。
或者可以實現為變量文件 Python或Java類 該框架將實例化。 在這種情況下,可以創建 變量屬性或讓他們從一個特殊的方法。
考慮變量文件使用
設置表
所有測試數據文件可以導入變量使用 變量 設置中設置表,以同樣的方式 資源文件都是進口的 使用 資源 設置。 同樣的資源文件,導入的路徑 變量文件被認為是相對於的目錄 導入文件,如果沒有找到,它是搜索的 目錄 模塊搜索路徑 。 也可以包含路徑變量, 和斜杠轉換為Windows上的反斜杠。 如果一個 參數文件需要 參數 后,它們是細胞中指定的路徑和也 可以包含變量。
*** Settings *** Variables myvariables.py Variables ../data/variables.py Variables ${RESOURCES}/common.py Variables taking_arguments.py arg1 ${ARG2}
所有變量從一個變量文件中可用的測試數據文件 進口。 如果幾個變量文件進口和他們 包含一個變量具有相同名稱的,最早的進口文件 考慮使用。 此外,表和變量中創建變量 從命令行設置覆蓋從變量文件變量。
命令行
考慮變量文件使用的另一種方法是使用命令行選項 ——variablefile 。 變量引用文件使用的路徑, 和可能的路徑參數加入一個冒號( :
):
--variablefile myvariables.py --variablefile path/variables.py --variablefile /absolute/path/common.py --variablefile taking_arguments.py:arg1:arg2
從機器人框架2.8.2,變量的文件中使用 命令行也的搜索 模塊搜索路徑 同樣作為 變量設置表中導入的文件。
如果一個變量文件作為一個絕對Windows路徑,冒號后 驅動器並不認為是一個分隔符:
--variablefile C:\path\variables.py
從機器人框架2.8.7,也可以使用分號 ( ;
)作為參數分隔符。 這是非常有用的,如果變量文件參數 包含冒號,但是需要周圍的整個價值 引用在類unix操作系統:
--variablefile "myvariables.py;argument:with:colons" --variablefile C:\path\variables.py;D:\data.xls
變量在這些變量在所有測試數據文件是全局可用 文件,同樣是 單獨的變量 設置的 ——變量 選擇。 如果兩個 ——variablefile 和 ——變量 選擇和使用有變量相同 的名字,那些單獨設置 ——變量 選擇優先考慮。
創建變量直接
基本語法
當變量文件被使用時,他們作為Python導入 模塊和全球所有屬性不從一開始 下划線( _
)被認為是變量。 因為變量 名稱不區分大小寫,大寫字母的名稱 可能的,但一般來說,大寫字母是全球的建議 變量和屬性。
VARIABLE = "An example string" ANOTHER_VARIABLE = "This is pretty easy!" INTEGER = 42 STRINGS = ["one", "two", "kolme", "four"] NUMBERS = [1, INTEGER, 3.14] MAPPING = {"one": 1, "two": 2, "three": 3}
在上面的示例中,變量 變量$ { }
, 另一個變量$ { }
, 創建。 前兩個變量是字符串,第三個是 一個整數,然后有兩個列表,最后的值是一個字典。 所有這些變量可以用作 標量變量 、列表和 字典也 變量列表 就像 @ {字符串}
(在字典的情況下 該變量只包含鍵),字典也 字典變量 就像 & {映射}
。
要創建一個變量或一個字典列表變量更加明確, 是可能的前綴的變量名 LIST__
或 DICT__
, 分別為:
from collections import OrderedDict LIST__ANIMALS = ["cat", "dog"] DICT__FINNISH = OrderedDict([("cat", "kissa"), ("dog", "koira")])
這些前綴不會最終變量名稱的一部分,但他們的事業 機器人框架來驗證實際上是類似或價值 類字典。 字典存儲的實際價值也轉過身 當使用到一個特殊的字典 創建字典 變量 在變量表。 這些字典的值是可訪問的 等屬性 $ { FINNISH.cat }
。 這些字典也下令,但是 保留源訂單還需要原來的字典 命令。
變量在兩個上面的例子也可以創建使用 變量下表。
*** Variables *** ${VARIABLE} An example string ${ANOTHER VARIABLE} This is pretty easy! ${INTEGER} ${42} @{STRINGS} one two kolme four @{NUMBERS} ${1} ${INTEGER} ${3.14} &{MAPPING} one=${1} two=${2} three=${3} @{ANIMALS} cat dog &{FINNISH} cat=kissa dog=koira
請注意
變量不替換字符串從變量文件。 例如, VAR = " $ {例子}”
將創建 變量 $ { VAR }
文字字符串值 一個$ {例子}
無論將變量 $ { }例子
存在與否。
使用對象作為值
變量變量並不僅限於只有字符串或文件 其他基本類型變量等值表。 相反,他們 變量可以包含任何對象。 在下面的示例中,變量 $ {映射}
包含一個Java散列表(這兩個值 在Jython例子只能當運行測試)。
from java.util import Hashtable MAPPING = Hashtable() MAPPING.put("one", 1) MAPPING.put("two", 2)
第二個例子創建 $ {映射}
作為一個Python字典 還有兩個變量從一個自定義創建對象中實現 相同的文件。
MAPPING = {'one': 1, 'two': 2} class MyObject: def __init__(self, name): self.name = name OBJ1 = MyObject('John') OBJ2 = MyObject('Jane')
創建變量動態
因為變量文件創建使用一個真正的編程語言, 他們可以動態設置變量的邏輯。
import os import random import time USER = os.getlogin() # current login name RANDOM_INT = random.randint(0, 10) # random integer in range [0,10] CURRENT_TIME = time.asctime() # timestamp like 'Thu Apr 6 12:45:21 2006' if time.localtime()[3] > 12: AFTERNOON = True else: AFTERNOON = False
上面的例子使用標准Python庫設置不同 變量,但是您可以使用您自己的代碼構建的價值。 的 下面的例子說明了這個概念,但同樣的,你的代碼 從數據庫中讀取數據,從一個外部文件甚至問它 用戶。
import math def get_area(diameter): radius = diameter / 2 area = math.pi * radius * radius return area AREA1 = get_area(1) AREA2 = get_area(2)
選擇變量包括
當機器人框架流程變量文件,所有的屬性 不從下划線預計將開始 變量。 這意味着即使函數或類中創建的 變量文件或從其他地方進口的是變量。 為 最后一個例子將包含的變量 $ {數學}
和 $ { get_area }
除了 $ { AREA1 }
和 $ { AREA2 }
。
通常不會引起額外的變量問題,但他們 可以覆蓋其他變量,導致難以調試的 錯誤。 一種可能忽略其他屬性是前綴 下划線:
import math as _math def _get_area(diameter): radius = diameter / 2.0 area = _math.pi * radius * radius return area AREA1 = _get_area(1) AREA2 = _get_area(2)
如果有大量的其他屬性,而不是加前綴 ,通常是更容易使用一個特殊的屬性 __all__
並賦予它處理屬性名稱的列表 作為變量。
import math __all__ = ['AREA1', 'AREA2'] def get_area(diameter): radius = diameter / 2.0 area = math.pi * radius * radius return area AREA1 = get_area(1) AREA2 = get_area(2)
請注意
的 __all__
屬性也和最初,使用 通過Python決定哪些屬性導入 當使用語法 從modulename進口*
。
得到特殊函數的變量
另一種方法獲得變量是有一個特別的 get_variables
函數(也camelCase語法 getVariables
是可能的)在一個變量文件。 如果這樣的一個函數 存在,機器人框架調用它,願接收變量 Python字典或Java 地圖
變量名稱作為鍵 和變量值的值。 創建變量可以作為標量、 列表和字典時一模一樣 創建變量直接 , 它可以使用 LIST__
和 DICT__
前綴來創建 列表和字典更明確的變量。 下面的例子是功能 相同的第一個 創建變量直接 的例子。
def get_variables(): variables = {"VARIABLE ": "An example string", "ANOTHER VARIABLE": "This is pretty easy!", "INTEGER": 42, "STRINGS": ["one", "two", "kolme", "four"], "NUMBERS": [1, 42, 3.14], "MAPPING": {"one": 1, "two": 2, "three": 3}} return variables
get_variables
也可以爭論,有助於改變嗎 哪些變量實際上是創建。 參數設置功能 作為一個Python函數任何其他參數。 當 把變量文件 投入使用 測試數據,參數中指定的路徑后細胞 變量文件,在命令行中他們是分開的 路徑與冒號或分號。
下面的虛擬的例子顯示了如何使用變量參數文件。 在一個 更現實的例子,論證可以通往外部文本文件 或數據庫讀取變量。
variables1 = {'scalar': 'Scalar variable', 'LIST__list': ['List','variable']} variables2 = {'scalar' : 'Some other value', 'LIST__list': ['Some','other','value'], 'extra': 'variables1 does not have this at all'} def get_variables(arg): if arg == 'one': return variables1 else: return variables2
實現變量文件作為Python或Java類
從機器人Framework 2.7開始,可以實現變量文件 Python和Java類。
實現
因為變量文件總是進口使用文件系統路徑創造 這些類有一些限制:
- Python類必須有名稱相同的模塊。
- 必須住在默認包的Java類。
- Java類路徑必須結束 . java 或 . class 。 類文件必須在這兩種情況下存在。
不管實現語言,框架將創建一個實例 類的不使用參數和變量將得到的實例。 同樣與模塊,直接變量可以定義為屬性 在實例或從特殊了 get_variables
(或 getVariables
)方法。
當變量直接定義一個實例,包含所有屬性 可調用的值將被忽略,以避免創建變量從可能的方法 實例。 如果你會需要可調用的變量,你所需要的 使用其他方法來創建變量文件。
例子
第一個例子使用Python和Java創建變量的屬性。 他們兩人創建變量 變量$ { }
和 @ {列表}
從類 屬性和 另一個變量$ { }
從一個實例屬性。
class StaticPythonExample(object): variable = 'value' LIST__list = [1, 2, 3] _not_variable = 'starts with an underscore' def __init__(self): self.another_variable = 'another value'
public class StaticJavaExample { public static String variable = "value"; public static String[] LIST__list = {1, 2, 3}; private String notVariable = "is private"; public String anotherVariable; public StaticJavaExample() { anotherVariable = "another value"; } }
第二個例子使用動態方法獲取變量。 這兩個 他們只創建一個變量 動態變量$ { }
。
class DynamicPythonExample(object): def get_variables(self, *args): return {'dynamic variable': ' '.join(args)}
import java.util.Map; import java.util.HashMap; public class DynamicJavaExample { public Map<String, String> getVariables(String arg1, String arg2) { HashMap<String, String> variables = new HashMap<String, String>(); variables.put("dynamic variable", arg1 + " " + arg2); return variables; } }
變量文件作為YAML
變量也可以實現為文件 YAML 文件。 YAML是一種數據序列化的語言與一個簡單的和人性化的語法。 下面的示例演示了一個簡單的YAML文件:
string: Hello, world! integer: 42 list: - one - two dict: one: yksi two: kaksi with spaces: kolme
請注意
需要使用YAML文件與機器人框架 PyYAML 模塊安裝。 如果你有 pip安裝,可以安裝它只需運行 pip安裝pyyaml
。
YAML支持新的機器人框架2.9。 從 2.9.2版本, 獨立的JAR分布 有 PyYAML包括默認情況下。
可以使用YAML變量文件完全一樣正常變量文件 從命令行中使用 ——variablefile 的選項,設置 表的使用 變量 設置,並動態地使用 導入變量 關鍵字。 要記住的唯一路徑 YAML文件必須結束 .yaml 擴展。
如果上面的YAML文件導入,它將創建完全相同的 變量如表:以下變量
*** Variables *** ${STRING} Hello, world! ${INTEGER} ${42} @{LIST} one two &{DICT} one=yksi two=kaksi
YAML文件用作變量文件必須在頂級映射。 上面的例子表明,鍵和值的映射 分別的變量名和值。 變量的值可以是任何數據 YAML的語法支持的類型。 如果名稱或值包含非ascii 字符,YAML文件變量必須是utf - 8編碼。
映射用作值自動轉換成特殊的字典 當使用 創建字典變量 在變量表。 最重要的是,這些字典都可以訪問的屬性值 就像 $ { DICT.one }
,假設他們的名字是有效的Python的屬性名稱。 如果名稱包含空格或否則不是一個有效的屬性名稱,它是 總是可以訪問字典值使用語法 & { DICT }(空間)
語法。 創建字典也下令,但是 不幸的是在YAML文件的原始順序不保存。