轉載請註明原始鏈接:https://blog.csdn.net/a464057216/article/details/104370180
後續此博客不再更新,歡迎大家搜索關注微信公衆號“測開之美”,測試開發工程師技術修煉小站,持續學習持續進步。
閱讀本文前,請先閱讀84.Robot Framework簡介及安裝驗證方法安裝RF框架。在創建測試用例、測試套之前,我們先學習RF框架測試數據的基本語法。
文件和目錄
測試用例的組織結構:
- 測試用例保存在測試用例文件中。
- 一個測試用例文件自動生成一個測試套,測試套包含測試用例文件中所有測試用例。
- 包含測試用例文件的目錄形成一個測試套。測試套目錄的子測試套就是各個測試用例文件形成的測試套。
- 測試套目錄可以多層嵌套。
- 測試套目錄可以包含一個特殊的初始化文件,控制測試套的創建。
另外:
- 測試庫文件包含低級關鍵字。
- 資源文件包含變量和更高級的自定義關鍵字。
- 變量文件提供比資源文件更靈活的創建變量的方式。
測試用例文件、測試套初始化文件、資源文件採用Robot Framework測試數據語法,測試庫文件、變量文件採用程序語言語法(通常是Python)。
測試數據表
Robot Framework的測試數據分爲多個表:
- Settings-設置表:引入測試庫文件、資源文件、變量文件。定義測試套和測試用例元信息。
- Variables-變量表:定義變量。
- Test Cases-測試用例表:使用關鍵字創建測試用例。
- Tasks-任務表:根據關鍵字創建任務。一個文件要麼包含任務,要麼包含測試用例。
- Keywords-關鍵字表:使用已有的低級關鍵字創建自定義關鍵字。
- Comments-註釋表:註釋。
不同的數據表通過表頭行區分,表頭行格式是*** Settins ***
,不區分大小寫,兩邊的空格可以忽略,*
的個數任意(只要以*
開頭即可),可以是*settings
。可以使用單數形式,例如*Setting
。表頭行可以包含額外數據,這些額外數據與表頭通常用兩個或兩個以上空格分割,這些額外數據通常起到註釋說明作用,RF框架會忽略這些表頭行中的額外數據。第一個表頭之前的任何數據都會被忽略。
如果數據表表頭不在上述列表中,RF會報錯。
測試數據文件格式
測試數據文件格式:
- 純文本文件:測試用例文件通常使用.robot、.txt後綴,資源文件除了這兩個後綴也可以使用.resource後綴,方便和測試用例文件區分。
- 包含純文本文件的reST格式(.rst或.rest後綴)。
- 兼容純文本文件的TSV格式(後續不再支持)。
- HTML格式(後續不再支持)。
需要用--extension <postfix>
選項配合不同的數據文件格式(.robot
格式可以自動解析,不需要用--extension
選項)。
純文本格式
許多編輯器支持Robot Framework的純文本文件編輯,例如RIDE,有語法高亮、關鍵字補全等功能。
純文本文件的每一行中,關鍵字和參數用分隔符分割。分隔符使用兩個或兩個以上的空格,或者被空格包圍的管道符(|
),可以同時採用兩種分隔符。
製表符被自動轉換爲兩個空格作爲分割符,多個連續的製表符也被當做一個分隔符。如果要明確使用製表符,需要轉義爲\t
。
包含非ASCII字符的純文本文件,必須保存爲UTF-8編碼。
空格分割符
可以調整作爲分隔符的空格的數量,令文件對齊工整:
*** Settings ***
Documentation Example using the space separated plain text format.
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}
空格分割符場景,測試數據中使用內置變量${empty}
表示空、${space}
表示空格,或者對空格轉義\
。
管道符分割符
空格分隔符通常無法準確區分關鍵字及其參數,管道符分隔符可以提高可讀性。管道符作爲分割符的行,必須以管道符開頭,不強制用管道符結尾。除了開頭和結尾的管道符,作爲分隔符的管道符左右必須各至少包含一個空格,可以調整左右空格的數量令文件對齊工整:
| *** Settings *** |
| Documentation | Example using the pipe separated plain text format.
| 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 |
管道符分隔符場景,如果測試數據中有左右都有空格的管道符,這個管道符需要轉義(\|
)。空元素通常不需要轉義(拖尾空單元格除外)。
reStructuredText格式
reStructuredText(reST)格式是一個易讀的純文本標記語法,常用於Python項目的文檔,可以編譯成HTML等多種格式。
使用代碼塊
reStructuredText文檔可以在代碼塊(code block)中包含代碼示例,編譯爲HTML等其他格式後,代碼塊通過Pygments進行語法高亮。標準的reStructuredText使用code
指令開始代碼塊,Sphinx
使用code-block
或sourcecode
指令。指令的參數是程序語言名。下例展示了Python和Robot Framework兩種語言的代碼塊:
.. code:: python
def example_keyword():
print('Hello, world!')
.. code:: robotframework
*** Test Cases ***
Example Test
Example Keyword
Robot Framework解析reSt文件時,先搜索code
、code-block
、sourcecode
指令下的robotframework
定義的測試數據(必須是純文本格式),然後將數據寫入內存並執行,忽略其他所有內容。
包含非ASCII字符的reST文件,必須保存爲UTF-8編碼。
數據解析規則
忽略的內容
Robot Framework忽略如下數據:
- 第一個測試數據表之前的數據。如果文件格式允許表之間存在數據,也忽略這些數據。
- 註釋表中的數據。
- 所有的空行。
- 行尾的空單元格,轉義的空單元格不會被忽略。
- 未用於轉義的單反斜線(
\
)。 - 如果單元格中第一個字符是
#
,後面的字符被當做註釋忽略。
Robot Framework的測試報告和很多工具也會忽略上述內容。要在Robot Framework中添加可見信息,可以放到測試用例、測試套的文檔或元信息中,或者使用內建關鍵字Log
或Comment
打印日誌。
轉義
常用轉義字符:
\$
:不作爲標量,例如\${notvar}
。\@
:不作爲列表,例如\@{notvar}
。\&
:不作爲字典,例如\&{notvar}
。\%
:不作爲環境變量,例如\%{notvar}
。\#
:不作爲註釋,例如\# not comment
。\=
:不構成命名參數,例如not\=named
。\|
:管道符分隔符場景時,不作爲分隔符。\\
:不作爲轉義字符。\n
:換行符(newline)。\r
:回車符(carriage return)。\t
:製表符。\xhh
:十六進制hh
表示的字符。\uhhhh
:十六進制hhhh
表示的字符。\Uhhhhhhhh
:十六進制hhhhhhhh
表示的字符。
測試數據中的字符串都是Unicode編碼,需要其字節字符串形式需要顯示轉換。可以使用Builtin庫中的Convert To Bytes
關鍵字、String庫中的Encode String To Bytes
關鍵字,或者Python代碼value.encode(UTF-8)
。
如果\x
、\u
、\U
三種轉義形式中有非法字符,最終結果是去掉轉義字符\
的字符串,例如\xAX
(X
不是十六進制字符)的結果是xAX
,\U00110000
(數值範圍超限)的最終結果是U00110000
(這個特性後續可能會有變化)。
如果需要環境相關的換行符(Windows是\r\n
,Linux是\n
,Mac是\r
),可以使用內置的${\n}
表示換行符。
\n
後面未轉義的空格會被忽略,例如two\nlines
和two\n lines
相等。
空單元格
空值作關鍵字參數,必須轉義或使用內建變量${EMPTY}
:
Using backslash
Do Something first arg \
Using ${EMPTY}
Do Something first arg ${EMPTY}
Non-trailing empty
Do Something ${EMPTY} second arg
空格
測試數據包含空格時,有兩個處理難點:
- 如果測試數據包含兩個或兩個以上空格,可能會被當做空格分隔符。
- 管道符分隔符場景,管道符左右的空格會被當做分隔符的一部分。
此時需要轉義空格或使用內建變量${SPACE}
:
- 前導空格:
\ leading space
,轉義字符加在空格前面,或者${SPACE}leading space
。 - 拖尾空格:
tailing space \
,轉義字符加在空格後面,或者tailing space${SPACE}
。 - 單獨一個空格:
\ \
,空格前後都要加轉義字符\
,或者${SPACE}
。 - 連續空格:
consecutive \ \ spaces
,或者consecutive${SPACE * 3}spaces
。
測試數據跨行
測試數據跨行可以使用省略號(…
)續行。測試用例表和關鍵字表中,省略號前必須至少有一個空單元格。在設置表和變量表中,省略號可以直接放在設置名或變量名下。在所有表中,省略號前的空單元格都被忽略。
測試套、測試用例、關鍵字的文檔和測試套的元信息也可能跨行,這些跨行的數據會自動用\n
拼接。
下面的例子未分行:
*** Settings ***
Documentation This is documentation for this test suite.\nThis kind of documentation can often be get quite long...
Default Tags default tag 1 default tag 2 default tag 3 default tag 4 default tag 5
*** Variable ***
@{LIST} this list is quite long and items in it could also be long
*** Test Cases ***
Example
[Tags] you probably do not have this many tags in real life
Do X first argument second argument third argument fourth argument fifth argument sixth argument
${var} = Get X first argument passed to this keyword is pretty long second argument passed to this keyword is long too
分行後變成這樣:
*** Settings ***
Documentation This is documentation for this test suite.
... This kind of documentation can often be get quite long...
Default Tags default tag 1 default tag 2 default tag 3
... default tag 4 default tag 5
*** Variable ***
@{LIST} this list is quite long and
... items in it could also be long
*** Test Cases ***
Example
[Tags] you probably do not have this many
... tags in real life
Do X first argument second argument third argument
... fourth argument fifth argument sixth argument
${var} = Get X
... first argument passed to this keyword is pretty long
... second argument passed to this keyword is long too
接下來可以繼續閱讀86.Robot Framework創建測試用例學習如何創建Robot Framework測試用例。