Robot Framework官方教程(一)入門
Robot Framework官方教程(二)測試數據語法
Robot Framework官方教程(三)創(chuàng)建測試用例
Robot Framework官方教程(四)創(chuàng)建測試套件
Robot Framework官方教程(五)使用測試庫
Robot Framework官方教程(六)變量
Robot Framework官方教程(七)創(chuàng)建用戶關鍵字
Robot Framework官方教程(八) 資源和變量文件
Robot Framework官方教程(九) 執(zhí)行測試用例
Robot Framework官方教程(十)擴展RobotFramework框架
2.1.1文件和目錄
測試數據的層次結構安排如下:
- 測試數據在測試數據文件中創(chuàng)建。
- 測試數據文件會自動創(chuàng)建一個包含該文件中的測試數據的測試套件。
- 包含測試數據文件的目錄構成了更高級別的測試套件拌喉。這樣的測試套件目錄具有從測試數據文件創(chuàng)建的套件作為其子測試套件怀喉。
- 測試套件目錄還可以包含其他測試套件目錄懒鉴,并且此分層結構可以根據需要進行深度嵌套钾腺。
- 測試套件目錄可以有一個特殊的初始化文件几莽。
除此之外神郊,還有:
2.1.2支持的文件格式
Robot Framework測試數據支持以表格格式定義践宴,使用超文本標記語言(HTML),制表符分隔值(TSV)爷怀,純文本或reStructuredText(reST)格式阻肩。Robot Framework根據文件擴展名為測試數據選擇解析器。擴展名不區(qū)分大小寫运授,識別的擴展名為 .html烤惊,.htm和.xhtml用于HTML,.tsv 用于TSV吁朦,.txt用于純文本柒室,.rst或 .rest用于reStructuredText。
HTML格式
在HTML文件中逗宜,測試數據在單獨的表中定義(請參閱下面的示例)雄右。Robot Framework 根據第一個單元格中的文本識別這些測試數據表。忽略已識別表格之外的所有內容纺讲。
Setting | Value | Value | Value |
---|---|---|---|
Library | OperatingSystem | ||
Variable | Value | Value | Value |
---|---|---|---|
${MESSAGE} | Hello, world! | ||
Test Case | Action | Argument | Argument |
---|---|---|---|
My Test | [Documentation] | Example test | |
Log | ${MESSAGE} | ||
My Keyword | /tmp | ||
Another Test | Should Be Equal | ${MESSAGE} | Hello, world! |
Keyword | Action | Argument | Argument |
---|---|---|---|
My Keyword | [Arguments] | ${path} | |
Directory Should Exist | ${path} |
編輯測試數據
可以使用您喜歡的任何編輯器編輯HTML文件中的測試數據擂仍,但建議您使用圖形編輯器來實際查看表格。還有一個名為RIDE的工具 可用于編輯測試數據熬甚。
TSV格式
TSV格式可以在Robot Framework的測試數據中使用逢渔,其目的與HTML相同。在TSV文件中乡括,所有數據都在一個大表中肃廓。測試數據表從一個或多個星號(*)中識別,然后是正常的表名和可選的結束星號诲泌。第一個識別的表之前的所有內容都與HTML數據中表外的數據都會被忽略盲赊。
*Setting* |
*Value* |
*Value* |
*Value* |
---|---|---|---|
Library | OperatingSystem | ||
*Variable* |
*Value* |
*Value* |
*Value* |
${MESSAGE} | Hello, world! | ||
*Test Case* |
*Action* |
*Argument* |
*Argument* |
My Test | [Documentation] | Example test | |
Log | ${MESSAGE} | ||
My Keyword | /tmp | ||
Another Test | Should Be Equal | ${MESSAGE} | Hello, world! |
*Keyword* |
*Action* |
*Argument* |
*Argument* |
My Keyword | [Arguments] | ${path} | |
Directory Should Exist | ${path} |
編輯測試數據
您可以在任何電子表格程序(如Microsoft Excel)中創(chuàng)建和編輯TSV文件。保存文件時選擇以制表符分隔的格式档礁,并記住將文件擴展名設置為.tsv角钩。關閉所有自動更正并配置工具以將文件中的所有值視為純文本也是一個好主意。
使用任何文本編輯器都可以相對輕松地編輯TSV文件,特別是如果編輯器支持從空格中直觀地分隔選項卡递礼。RIDE也支持TSV格式惨险。
Robot Framework首先將所有內容拆分為行,然后根據表格字符將行拆分為單元格來解析TSV數據脊髓。電子表格程序有時會用引號括起單元格(例如辫愉,“my value”),而Robot Framework會刪除它們将硝。數據中可能的引號加倍(例如恭朗, "my ""quoted"" value"),這也是正確處理的依疼。如果您使用電子表格程序來創(chuàng)建TSV數據痰腮,則不需要注意這一點,但如果以編程方式創(chuàng)建數據律罢,則必須遵循與電子表格相同的引用約定膀值。
編碼
TSV文件總是應該使用UTF-8編碼。由于ASCII是UTF-8的子集误辑,因此自然也支持純ASCII沧踏。
純文本格式
純文本格式在技術上與TSV格式類似,但是單元格之間的分隔符是不同的巾钉。TSV格式使用制表符翘狱,但在純文本格式中,您可以使用兩個或多個空格砰苍,或用管道字符(|)包圍潦匈。
測試數據表在名字前必須有一個或多個星號,類似于在TSV格式师骗。否則會忽略表頭中的星號和可能的空格历等,例如,***Settings***
和*Settings*
的工作方式相同辟癌。與TSV格式類似,忽略第一個表之前的所有內容荐捻。
在純文本文件中黍少,tabj會自動轉換為兩個空格。這允許使用單個tab作為分隔符处面,類似于TSV格式厂置。但請注意,在純文本格式中魂角,多個tab被視為單個分隔符昵济,而在TSV格式中,每個tab都是分隔符。
空格分隔格式
用作分隔符的空格數可以變化访忿,只要存在至少兩個空格瞧栗,因此可以很好地對齊數據。這比在文本編輯器中編輯TSV格式有明顯的好處海铆,因為使用TSV無法控制對齊迹恐。
*** Settings ***
Library OperatingSystem
*** Variables ***
${MESSAGE} Hello, world!
*** Test Cases ***
My Test [Documentation] Example test
Log ${MESSAGE}
My Keyword /tmp
Another Test
Should Be Equal ${MESSAGE} Hello, world!
*** Keywords ***
My Keyword [Arguments] ${path}
Directory Should Exist ${path}
因為space被用作分隔符,所有空單元必須通過${EMPTY}變量或一個反斜杠被轉義卧斟。否則 會像其他測試數據一樣處理空白殴边,首尾的和連續(xù)的空格都會被忽略。
管道和空格分隔格式
空格分隔格式的最大問題是在視覺上很難區(qū)分關鍵字的參數珍语。尤其是當關鍵字占用大量參數或者參數包含空格時問題更加嚴重锤岸。在這種情況下属韧,管道和空格分隔變體可以更好地工作怨酝,因為它使單元格邊界更加明顯苍苞。
| *Setting* | *Value* |
| Library | OperatingSystem |
| *Variable* | *Value* |
| ${MESSAGE} | Hello, world! |
| *Test Case* | *Action* | *Argument* |
| My Test | [Documentation] | Example test |
| | Log | ${MESSAGE} |
| | My Keyword | /tmp |
| Another Test | Should Be Equal | ${MESSAGE} | Hello, world!
| *Keyword* |
| My Keyword | [Arguments] | ${path}
| | Directory Should Exist | ${path}
純文本文件格式的測試數據可以既包含空格又包含空格加管道的分隔格式腊凶,但是單行必須始終使用相同的分隔符撵术。管道和空格分隔符由行首的管道符識別毒返,但行尾的管道符是可選的链快。管道兩側必須至少有一個空格(開頭和結尾除外)险领,除了使數據更清晰之外凡辱,不需要對齊管道戒职。
使用管道和空格分隔格式時,無需轉義空單元格(行尾空單元格除外)透乾。唯一要考慮的是洪燥,實際測試數據中的管道必須使用反斜杠進行轉義:
| ${file count} = | Execute Command | ls -1 *.txt \| wc -l |
| Should Be Equal | ${file count} | 42 |
編輯和編碼
與HTML和TSV相比,純文本格式的最大好處之一是使用普通文本編輯器進行編輯非常容易乳乌。對于Emacs 捧韵,甚至還有一個特殊的robot-mode.el,它提供語法高亮和關鍵字完成汉操。RIDE也支持純文本格式再来。
與TSV測試數據類似,純文本文件總是使用UTF-8編碼磷瘤。因此芒篷,也支持ASCII文件。
reStructuredText格式
reStructuredText(reST)是一種易于閱讀的純文本標記語法采缚,通常用于Python項目的文檔(包括Python本身以及本用戶指南)针炉。通過使用機器人框架的reST,您可以混合格式豐富的文檔和表格扳抽,以簡明的文本格式指定測試數據篡帕,使用簡單的文本編輯器殖侵,差異工具和源代碼控制系統(tǒng)。
2.1.3測試數據
測試數據由下面列出的四種類型的表組成镰烧。這些測試數據表由表的第一個單元格標識拢军,下表中的最后一列列出了可用作表名稱的不同別名。
表名 | 用于 | 別名 |
---|---|---|
設置表 | 1)導入測試庫拌滋, 資源文件和變量文件 2)為測試套件 和測試用例定義元數據 | Setting, Settings, Metadata |
變量表 | 定義可在測試用例中的其他位置使用的變量 | Variable, Variables |
測試用例表 | 從可用關鍵字創(chuàng)建測試用例 | Test Case, Test Cases |
關鍵字表 | 從現有的較低級別關鍵字創(chuàng)建用戶關鍵字 | Keyword, Keywords, User Keyword, User Keywords |
2.1.4解析數據的規(guī)則
被忽略的數據
當Robot Framework解析測試數據時朴沿,它會忽略:
- 所有不以第一個單元格中的已識別表名開頭的表。
- 除了第一個單元格之外败砂,表格第一行上的所有其他內容赌渣。
- HTML / reST中的表外數據和TSV中第一個表之前的數據。
- 所有空行昌犹,這意味著可以使用這些行來使表更具可讀性坚芜。
- 行尾的所有空單元格; 您必須添加反斜杠(\)以防止忽略此類單元格。
- 所有單反斜杠(\); 它們被用作轉義斜姥。
- 哈希標記(#)后面的所有字符鸿竖,如果它是單元格的第一個字符; 這意味著哈希標記可用于在測試數據中輸入注釋。
- HTML / reST測試數據中的所有格式铸敏。
當Robot Framework忽略某些數據時缚忧,此數據在任何生成的報告中都不可用,此外杈笔,Robot Framework使用的大多數工具也會忽略它們闪水。要添加在Robot Framework輸出中可見的信息,或者可用于RIDE的信息蒙具,請將其放在測試數據或套件的文檔或其他元數據中球榆,或使用BuiltIn庫中提供的Log或Comment關鍵字進行記錄。
轉義
Robot Framework解析器的轉義字符是反斜杠(\)禁筏。轉義字符可以使用如下:
- 要轉義特殊字符以便使用它們的文字值:
-
\${notvar}
表示看起來像變量的文字字符串${notvar}
-
\\
表示單個反斜杠(例如持钉,C:\\Temp
) -
\#
表示文字哈希(#
)標記,即使在單元格的開頭
-
- 影響空格的解析篱昔。
- 為了防止在使用純文本格式時在一般的行末和任何地方忽略空單元格每强。另一種更常見的可能性是使用內置變量
${EMPTY}
。 - 在使用管道和空格分隔格式時轉義管道字符旱爆。
- 使用純文本格式時舀射,在for循環(huán)中轉義縮進的單元格。
- 防止鏈接文檔使用換行符拆分為多行怀伦。
注意
這些轉義規(guī)則僅適用于關鍵字的參數和設置的值。例如山林,它們不用于關鍵字和測試數據名稱房待。
處理空白
Robot Framework處理空格(例如空格邢羔,換行符和制表符)的方式與在HTML中處理它們的方式相同。這意味著Robot Framework:
- 刪除所有單元格中的首尾空格桑孩。
- 將多個連續(xù)空格更改為單個空格拜鹤。
- 將所有換行符和制表符轉換為空格。
為了防止Robot Framework根據這些規(guī)則解析數據流椒,可以使用反斜杠:
- 在行首空格之前敏簿,例如
\ some text
。 - 在連續(xù)的空格之間宣虾,例如
text \ \ more text
惯裕。 - 行尾空格,例如一些文本
some text \ \
绣硝。 - 作為
\n
創(chuàng)建換行符蜻势,例如first line\n2nd line
。 - 作為
\t
來創(chuàng)建制表符鹉胖,例如text\tmore text
握玛。 - 作為
\r
來創(chuàng)建回車符,例如text\rmore text
甫菠。
表示首尾或連續(xù)空格的另一種更常見的方法是使用內置變量 ${SPACE}
挠铲。該擴展變量甚至允許類似語法${SPACE *8}
,這使得處理連續(xù)空格非常簡單寂诱。
注意
\n
后面未轉義空白字符會被忽略拂苹,以允許包含wrapping換行符的長行。這意味著two lines\nhere
和two lines\n here
是等價的刹衫。此規(guī)則的一個例外是在擴展變量中不會忽略空白字符醋寝。
將測試數據劃分為多行
如果有很多數據,一行容納不下带迟,則可以使用省略號(...
)繼續(xù)上一行音羞。在測試數據Testcase和用戶關鍵字Keywords表中,省略號前必須至少有一個空單元格仓犬。在設置Settings和變量Variables表中嗅绰,它可以直接放在設置或變量名稱下。
在所有表中搀继,省略號之前的所有空單元格會被忽略窘面。
此外,只需一個值(主要是文檔Document)的設置值可以拆分為多個列叽躯。在解析測試數據時财边,這些值將與空格一起連接。從Robot Framework 2.7開始点骑,分成多行的文檔和測試套件元數據將與換行符一起鏈接酣难。