robotframework筆記14


創建用戶關鍵字

關鍵字表是用於創建新的更高層次的關鍵詞 結合現有的關鍵詞。 這些關鍵字被稱為 用戶 關鍵字 區分他們的最低水平 庫關鍵字 實現在測試庫。 的語法創建用戶 關鍵詞非常接近的語法創建測試用例 很容易學習。

用戶關鍵字語法

基本語法

在許多方面,總體用戶關鍵字語法是相同的 測試用例的語法 。 用戶創建關鍵字關鍵字表 這不同於測試用例表,用於只有名字 識別它們。 用戶在第一列類似關鍵字名稱 測試用例的名稱。 也從關鍵字,創建用戶的關鍵詞 從關鍵詞在測試庫或其他用戶的關鍵詞。 關鍵字的名字 通常在第二列,但當設置變量的 關鍵字返回值,它們在隨后的列。

*** 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 工具可以創建 從 資源文件 。 最后,文檔的第一行 顯示為一個關鍵字的文檔 測試日志 

有時關鍵詞需要被刪除,取而代之的是新的,或 棄用其他原因。 用戶關鍵字可以棄用 從文檔 *不* ,這將 導致使用關鍵字的一個警告。 有關更多信息,請參見 不以為然的關鍵詞 部分。

用戶關鍵詞標簽

從機器人Framework 2.9,關鍵詞也可以有標簽。 用戶的關鍵字 可以設置標簽 (標簽) 設置同樣 測試用例的標簽 , 但可能 力的標簽 和 默認的標簽 設置不 影響它們。 另外可以指定關鍵詞標簽的最后一行 的文檔 標簽: 前綴和由逗號分隔。 例如, 后兩個關鍵詞都得到相同的三個標簽。

*** Keywords *** Settings tags using separate setting  [Tags] my fine tags  No Operation Settings tags using documentation  [Documentation] I have documentation. And my documentation has tags.  ... Tags: my, fine, tags  No Operation

關鍵詞標簽生成的日志和文檔所示 Libdoc , 的關鍵字也可以根據標簽搜索。 ——removekeywords 和 ——flattenkeywords 命令行選項也支持選擇關鍵詞 標簽,和新用法的關鍵詞標簽可能被添加在后面的版本。

類似與 測試用例的標簽 ,用戶關鍵詞標簽 機器人- 前綴 是 保留 特色的機器人框架本身。 用戶應該 因此不使用任何標簽 機器人- 除非真正激活前綴 特殊的功能。

用戶關鍵字參數

大多數用戶關鍵詞需要一些參數。 的語法 指定他們可能是最復雜的功能正常 需要與機器人框架,但即使是相對容易的, 特別是在最常見的情況。 參數通常是指定的 的 (參數) 使用相同的設置,參數名稱 語法 變量 例如, $ { 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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM