創建用戶關鍵字
關鍵字表是用於創建新的更高層次的關鍵詞 結合現有的關鍵詞。 這些關鍵字被稱為 用戶 關鍵字 區分他們的最低水平 庫關鍵字 實現在測試庫。 的語法創建用戶 關鍵詞非常接近的語法創建測試用例 很容易學習。
用戶關鍵字語法
基本語法
在許多方面,總體用戶關鍵字語法是相同的 測試用例的語法 。 用戶創建關鍵字關鍵字表 這不同於測試用例表,用於只有名字 識別它們。 用戶在第一列類似關鍵字名稱 測試用例的名稱。 也從關鍵字,創建用戶的關鍵詞 從關鍵詞在測試庫或其他用戶的關鍵詞。 關鍵字的名字 通常在第二列,但當設置變量的 關鍵字返回值,它們在隨后的列。
*** Keywords *** Open Login Page Open Browser http://host/login.html Title Should Be Login Page Title Should Start With [Arguments] ${expected} ${title} = Get Title Should Start With ${title} ${expected}
大多數用戶關鍵詞需要一些參數。 這個重要的特性 已經在上面的第二個例子,詳細解釋 后來在這一節中 類似地, 用戶關鍵字返回 值 。
可以創建用戶關鍵字 測試用例文件 , 資源文件 , 和 測試套件的初始化文件 。 關鍵字中創建資源 文件可用於文件使用它們,而其他關鍵字 只能在他們創建的文件。
設置關鍵字表中
用戶關鍵字可以有類似的設置 測試用例 ,他們 有相同的方括號語法分離關鍵字 的名字。 下面列出了所有可用的設置和稍后解釋 這一節。
- (文檔)
- 用於設置一個 用戶的關鍵字的文檔 。
- (標簽)
- 集 標簽 關鍵字。
- (參數)
- 指定 用戶關鍵字參數 。
- (返回)
- 指定 用戶關鍵字返回值 。
- (拆卸)
- 指定 用戶關鍵字拆卸 。
- (超時)
- 集可能 用戶關鍵字超時 。 超時 討論了 在自己的部分。
用戶關鍵字名稱和文檔
中定義的用戶關鍵字的名字是第一列的用戶 關鍵字表。 當然,這個名字應該是描述性的,它是 接受有很長的關鍵字的名字。 實際上,當創建 通常use-case-like測試用例,最高級別的關鍵詞 制定句子甚至段落。
用戶關鍵字可以有一個文檔的設置 (文檔) 設置,完全一樣 測試用例文檔 。 這個設置文檔用戶關鍵字的測試數據。 它也顯示 在更正式的關鍵字的文檔, Libdoc 工具可以創建 從 資源文件 。 最后,文檔的第一行 顯示為一個關鍵字的文檔 測試日志 。
有時關鍵詞需要被刪除,取而代之的是新的,或 棄用其他原因。 用戶關鍵字可以棄用 從文檔 *不*
,這將 導致使用關鍵字的一個警告。 有關更多信息,請參見 不以為然的關鍵詞 部分。
用戶關鍵字參數
大多數用戶關鍵詞需要一些參數。 的語法 指定他們可能是最復雜的功能正常 需要與機器人框架,但即使是相對容易的, 特別是在最常見的情況。 參數通常是指定的 的 (參數) 使用相同的設置,參數名稱 語法 變量 例如, $ { arg }
。
位置參數
最簡單的方法來指定參數(除了沒有) 僅使用位置參數。 在大多數情況下,這就是一切了 這是必要的。
語法是這樣的首先 (參數) 設置是 鑒於,然后在隨后的定義參數名稱 細胞。 每個參數都是在自己的細胞,使用相同的語法 變量。 關鍵字必須使用盡可能多的參數 參數名稱在其簽名。 實際的參數名稱不 框架問題,但從用戶的角度來看他們應該 盡可能的描述。 建議 在變量名用小寫字母,要么 $ { my_arg }
, $ {我的arg }
或 $ { myArg }
。
*** Keywords *** One Argument [Arguments] ${arg_name} Log Got argument ${arg_name} Three Arguments [Arguments] ${arg1} ${arg2} ${arg3} Log 1st argument: ${arg1} Log 2nd argument: ${arg2} Log 3rd argument: ${arg3}
默認值與用戶關鍵詞
在創建用戶關鍵字時,位置參數是充分的 大多數情況下。 然而,有時有用,關鍵字 默認值 的部分或全部參數。 同時用戶關鍵字 支持默認值,需要新的語法不會增加很多 已經討論了基本的語法。
簡而言之,默認值被添加到參數,這首先是 等號( =
)的值,例如 $ { arg } =違約
。 可以有許多參數與違約,但他們都必須有 正常的位置參數。 默認值可以包含一個 變量 上創建 測試套件或全球范圍 ,但局部變量的關鍵字 遺囑執行人不能使用。 從機器人Framework 3.0,默認值 早些時候還定義基於參數關鍵字所接受。
請注意
默認值是空間敏感的語法。 空間 之前 =
不允許,和可能的空間 后被認為是默認值本身的一部分。
*** Keywords *** One Argument With Default Value [Arguments] ${arg}=default value [Documentation] This keyword takes 0-1 arguments Log Got argument ${arg} Two Arguments With Defaults [Arguments] ${arg1}=default 1 ${arg2}=${VARIABLE} [Documentation] This keyword takes 0-2 arguments Log 1st argument ${arg1} Log 2nd argument ${arg2} One Required And One With Default [Arguments] ${required} ${optional}=default [Documentation] This keyword takes 1-2 arguments Log Required: ${required} Log Optional: ${optional} Default Based On Earlier Argument [Arguments] ${a} ${b}=${a} ${c}=${a} and ${b} Should Be Equal ${a} ${b} Should Be Equal ${c} ${a} and ${b}
當一個關鍵字和默認值,只接受多個參數 其中一些需要覆蓋,這往往是方便使用 命名參數 語法。 當這個語法是用戶使用 關鍵詞,沒有指定的參數 $ { }
裝飾。 例如,可以使用第二個字以上 下面 $ { __arg1 }
仍將得到其默認值。
*** Test Cases *** Example Two Arguments With Defaults arg2=new value
正如所有的python支持者必須已經注意到的,語法 指定默認參數嚴重受Python語法 函數的默認值。
Varargs和用戶關鍵字
有時甚至默認值是不夠的,有必要 為一個關鍵字接受 數量可變的參數 。 用戶的關鍵字 也支持這個特性。 所需要的就是擁有 變量列表 這樣的 作為 @ { varargs }
在關鍵字可能位置參數后簽名。 這個語法可以結合前面描述的默認值,和 最后列表變量得到所有剩下的參數不匹配 其他參數。 列表變量可以有任意數量的物品,甚至是零。
*** Keywords *** Any Number Of Arguments [Arguments] @{varargs} Log Many @{varargs} One Or More Arguments [Arguments] ${required} @{rest} Log Many ${required} @{rest} Required, Default, Varargs [Arguments] ${req} ${opt}=42 @{others} Log Required: ${req} Log Optional: ${opt} Log Others: : FOR ${item} IN @{others} \ Log ${item}
注意,如果使用上面最后一個字與不止一個 參數,第二個參數 $ {選擇}
總是給定的 值而不是默認的值。 這種情況即使給定 值是空的。 最后一個例子也說明了一個變量 數量的參數接受一個用戶關鍵字可以用在一個 為 循環 。 這種組合的兩個,而先進的功能 有時是非常有用的。
再次,python支持者可能注意到變量的數量 參數語法非常接近一個Python。
Kwargs與用戶關鍵字
用戶關鍵字也可以接受 免費的關鍵字參數 通過一個 字典 變量 就像 & { kwargs }
作為最后一個參數后可能的位置 參數和可變參數。 當關鍵字被調用時,該變量會得到所有 命名參數不匹配任何位置參數的關鍵字 簽名。
*** Keywords *** Kwargs Only [Arguments] &{kwargs} Log ${kwargs} Log Many @{kwargs} Positional And Kwargs [Arguments] ${required} &{extra} Log Many ${required} @{extra} Run Program [Arguments] @{varargs} &{kwargs} Run Process program.py @{varargs} &{kwargs}
上面的最后一個例子展示了如何創建一個包裝器的關鍵字 接受任何位置或命名參數和傳遞。 看到 kwargs例子 對於一個完整的示例相同的關鍵字。
還kwargs支持與用戶關鍵字和kwargs工作非常類似的工作 在Python中。 在簽名也向前傳遞參數時, & { kwargs }
差不多是Python的嗎 * * kwargs
。
將參數嵌入到關鍵字的名字
機器人框架也另一種方法向用戶傳遞參數 關鍵字比指定關鍵字名稱后細胞內 在前一節中解釋。 這種方法是基於嵌入 參數直接進入關鍵字名稱和它的主要好處是 使其更容易使用真實和清晰的句子作為關鍵字。
基本語法
它一直可以使用關鍵字的樣子 選擇狗 從列表 和 從列表中選擇貓 ,但所有這些關鍵字 一定是單獨實現。 嵌入參數的概念 入關鍵字的名字是所有你需要的是一個字的名字 從列表中選擇$ {動物} 。
*** Keywords *** Select ${animal} from list Open Page Pet Selection Select Item From List animal_list ${animal}
關鍵字使用嵌入式論點不能采取任何“正常”的論點 (指定 (參數) 設置)除此之外 就像其他用戶創建關鍵字。 中使用的參數的名稱 自然會可以在關鍵字和他們有不同嗎 價值取決於關鍵字。 例如, $ {動物}
在前面的是有價值的 狗
如果關鍵字 使用像 從列表中選擇狗 。 顯然它不是 強制使用這些參數在關鍵字,他們可以 因此作為通配符。
這類關鍵字也用同樣的方式作為其他關鍵詞 除了空間和強調不被忽視 的名字。 然而,他們是不區分大小寫的像其他關鍵詞。 為 示例中,關鍵字在上面的例子中可以使用 從列表中選擇x ,但不喜歡 選擇x fromlist 。
嵌入參數不支持默認值或變量的數量 參數正常參數。 使用變量時 把這些關鍵詞是可能的,但可以減少可讀性。 只注意到嵌入式參數處理用戶的關鍵詞。
嵌入參數匹配的太多
一個棘手的部分使用嵌入式參數是確保 值調用時使用的關鍵字匹配正確的參數。 這 是一個問題尤其是如果有多個參數和人物 分離也可能出現在給定的值。 例如, 關鍵字 城市選擇$ { } $ {團隊} 如果使用不正確工作 與城市包含了部分 選擇洛杉磯湖人隊 。
解決這個問題很簡單,那就是引用的參數(如。 城市選擇“$ { } " $ {團隊} " ),在引用中使用關鍵字 格式(如。 選擇“洛杉磯”“湖人隊” )。 這種方法是 不足以解決所有的沖突,但它是 仍然強烈推薦,因為它使論點脫穎而出 其他關鍵字。 一個更強大,但也更復雜 解決方案, 使用自定義正則表達式 在定義變量時, 在下一節中解釋。 最后,如果事情變得復雜, 這可能是一個更好的主意轉而使用普通位置參數。
參數匹配的問題往往出現在創建太多了 的關鍵字 忽略了/ / /,/但前綴 。 例如, $ {名稱}回家 匹配 給珍妮回家 所以 那 $ {名稱}
獲得的價值 給珍妮
。 引號的 參數,像在 " $ {名稱}”回家 ,解決這個問題 很容易。
使用自定義正則表達式
與嵌入參數被稱為關鍵字時,值 匹配在內部使用 正則表達式 (簡稱regexp)。 默認的邏輯,這樣每一個論點 名字是一個模式所取代 . * ?
基本上匹配 任何字符串。 這個邏輯通常很有效,但而已 上面所討論的,有時候關鍵字 比賽多 目的 。 引用或分離參數 文本可以幫助但是,例如,下面的測試失敗,因為關鍵字 我執行“ls”與“韓” 這兩個定義匹配 關鍵詞。
*** Test Cases *** Example I execute "ls" I execute "ls" with "-lh" *** Keywords *** I execute "${cmd}" Run Process ${cmd} shell=True I execute "${cmd}" with "${opts}" Run Process ${cmd} ${opts} shell=True
解決這個問題是使用自定義正則表達式 確保關鍵字匹配只應該在那 特定的上下文。 能夠使用該功能,並完全 理解本節中的示例,您需要理解 最基本的正則表達式語法。
一個定制的嵌入式參數正則表達式定義之后 基本的參數,參數名稱和正則表達式 用冒號分隔。 例如,一個論點,應該匹配 只有數字可以被定義 $ {參數:\ d + }
。 使用自定義 下面的例子說明了正則表達式。
*** Test Cases *** Example I execute "ls" I execute "ls" with "-lh" I type 1 + 2 I type 53 - 11 Today is 2011-06-27 *** Keywords *** I execute "${cmd:[^"]+}" Run Process ${cmd} shell=True I execute "${cmd}" with "${opts}" Run Process ${cmd} ${opts} shell=True I type ${a:\d+} ${operator:[+-]} ${b:\d+} Calculate ${a} ${operator} ${b} Today is ${date:\d{4\}-\d{2\}-\d{2\}} Log ${date}
在上面的例子中關鍵字 我執行“ls”與“韓” 匹配 只有 我執行“$ { cmd }”和“$ {選擇} " 。 這是保證 因為自定義正則表達式 [^ "]+
在 我執行 “$ { cmd:[^]}” 意味着一個匹配的參數不能包含任何 引號。 在這種情況下不需要添加自定義的regexp 其他 我執行 變體。
提示
如果你引用參數,使用正則表達式 [^ "]+
直到第一個保證的參數匹配 關閉報價。
支持正則表達式語法
使用Python實現,自然使用Python的機器人框架 再保險 非常標准的模塊 正則表達式 語法 。 這個語法與嵌入式否則完全支持 參數,但regexp擴展格式 (?…)
不能 使用。 還需要注意的是,嵌入參數進行匹配 不區分大小寫。 如果正則表達式語法無效, 創建關鍵字失敗與錯誤中可見 測試執行 錯誤 。
轉義特殊字符
有一些特殊字符需要使用時逃走了 自定義正則表達式嵌入參數。 首先,可能關閉 花括號( }
)的模式需要保住了一個反斜杠 ( \ }
),否則參數就會結束了。 這是 與關鍵字前面的示例中所示 今天是$ {日期:\ d { 4 \ } - \ d { 2 \ } \ d { 2 \ } } 。
反斜杠( \ )是一種特殊的字符在Python中常規 表達式語法,因此需要逃脫了如果你想要一個 文字反斜杠字符。 在這種情況下最安全的轉義序列 是四個反斜杠( \ \ \ \
),但是,這取決於下一個 性格,還兩個反斜杠可能就足夠了。
注意到關鍵字名稱和可能的嵌入參數 應該 不 使用正常的逃脫了 測試數據泄漏 規則 。 這意味着,例如,反斜杠的表達式 就像 $ {名稱:\ w + }
不應該逃跑。
使用自定義的變量嵌入參數正則表達式
每當定制的嵌入式參數使用正則表達式時,機器人 框架會自動提高指定的regexp,這樣他們 匹配變量除了與模式相匹配的文本。 這 意味着它總是可以用關鍵字使用變量 嵌入參數。 例如,下面的測試用例能通過 從早期的例子使用關鍵詞。
*** Variables *** ${DATE} 2011-06-27 *** Test Cases *** Example I type ${1} + ${2} Today is ${DATE}
一個缺點的變量自動定制正則匹配 表達式是可能值的關鍵字 實際上並沒有匹配指定的正則表達式。 例如,變量 $ {日期}
在上面的例子中可以包含任何價值 今天是$ {日期} 仍將匹配相同的關鍵字。
行為驅動開發的例子
最大的好處有參數作為關鍵字的名字是它的一部分 使它更容易使用更高級的句子的關鍵詞在編寫測試 病例 行為驅動方式 。 下面的例子說明了這一點。 請注意 也前綴 鑒於 , 當和 然后 是 遺漏了 關鍵字定義 。
*** Test Cases *** Add two numbers Given I have Calculator open When I add 2 and 40 Then result should be 42 Add negative numbers Given I have Calculator open When I add 1 and -2 Then result should be -1 *** Keywords *** I have ${program} open Start Program ${program} I add ${number 1} and ${number 2} Input Number ${number 1} Push Button + Input Number ${number 2} Push Button = Result should be ${expected} ${result} = Get Result Should Be Equal ${result} ${expected}
請注意
在機器人框架受嵌入參數特性 如何 步驟定義 中創建一個受歡迎的BDD工具。
用戶關鍵字返回值
同樣作為圖書館的關鍵詞,也可以返回用戶關鍵詞 值。 通常的定義返回值 (返回) 設置,但也可以使用 內裝式 關鍵字 從關鍵字 和 從關鍵字如果回來 。 無論如何返回值,就可以 分配給變量 在測試用例和其他用戶的關鍵詞。
使用 (返回) 設置
最常見的情況是,用戶關鍵字返回一個值,它是 分配給一個標量變量。 當使用 (返回) 設置,這是 完成在接下來的細胞通過返回值后設置。
用戶關鍵字也可以返回多個值,然后可以分為 幾個標量變量,變量列表,或標量變量 和一個列表變量。 幾個可以簡單地通過返回值 在不同的細胞后,指定這些值 (返回) 設置。
*** Test Cases *** One Return Value ${ret} = Return One Value argument Some Keyword ${ret} Multiple Values ${a} ${b} ${c} = Return Three Values @{list} = Return Three Values ${scalar} @{rest} = Return Three Values *** Keywords *** Return One Value [Arguments] ${arg} Do Something ${arg} ${value} = Get Some Value [Return] ${value} Return Three Values [Return] foo bar zap
使用特殊的關鍵字返回
內裝式 關鍵字 從關鍵字 和 從關鍵字如果回來 從用戶的關鍵字有條件地允許返回中間的字。 他們兩人也接受可選的處理完全一樣的返回值 與 (返回) 設置上面所討論的。
下面的第一個例子是功能與之前相同 (返回) 設置的例子。 第二,更先進的例子 演示了返回內部條件 for循環 。
*** Test Cases *** One Return Value ${ret} = Return One Value argument Some Keyword ${ret} Advanced @{list} = Create List foo baz ${index} = Find Index baz @{list} Should Be Equal ${index} ${1} ${index} = Find Index non existing @{list} Should Be Equal ${index} ${-1} *** Keywords *** Return One Value [Arguments] ${arg} Do Something ${arg} ${value} = Get Some Value Return From Keyword ${value} Fail This is not executed Find Index [Arguments] ${element} @{items} ${index} = Set Variable ${0} :FOR ${item} IN @{items} \ Return From Keyword If '${item}' == '${element}' ${index} \ ${index} = Set Variable ${index + 1} Return From Keyword ${-1} # Could also use [Return]
請注意
這兩個 從關鍵字 和 從關鍵字如果回來 因為機器人框架2.8。
用戶關鍵字拆卸
用戶使用關鍵字可以定義拆解 (拆卸) 設置。
關鍵字拆卸工作一樣 測試用例 拆卸 。 最重要的是,拆卸總是一個 關鍵字,盡管它可以被另一個用戶的關鍵字,就會執行 也當用戶關鍵字失敗。 此外,所有的步驟 拆卸執行即使其中一個失敗。 然而,失敗 關鍵字拆卸將會失敗的測試用例和后續步驟 測試不運行。 的名稱關鍵字執行拆卸 也可以是變量。
*** Keywords *** With Teardown Do Something [Teardown] Log keyword teardown Using variables [Documentation] Teardown given as variable Do Something [Teardown] ${TEARDOWN}