85.Robot Framework測試數據基本語法

轉載請註明原始鏈接: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-blocksourcecode指令。指令的參數是程序語言名。下例展示了Python和Robot Framework兩種語言的代碼塊:

.. code:: python

   def example_keyword():
       print('Hello, world!')

.. code:: robotframework

   *** Test Cases ***
   Example Test
       Example Keyword

Robot Framework解析reSt文件時,先搜索codecode-blocksourcecode指令下的robotframework定義的測試數據(必須是純文本格式),然後將數據寫入內存並執行,忽略其他所有內容。
包含非ASCII字符的reST文件,必須保存爲UTF-8編碼。

數據解析規則

忽略的內容

Robot Framework忽略如下數據:

  • 第一個測試數據表之前的數據。如果文件格式允許表之間存在數據,也忽略這些數據。
  • 註釋表中的數據。
  • 所有的空行。
  • 行尾的空單元格,轉義的空單元格不會被忽略。
  • 未用於轉義的單反斜線(\)。
  • 如果單元格中第一個字符是#,後面的字符被當做註釋忽略。

Robot Framework的測試報告和很多工具也會忽略上述內容。要在Robot Framework中添加可見信息,可以放到測試用例、測試套的文檔或元信息中,或者使用內建關鍵字LogComment打印日誌。

轉義

常用轉義字符:

  • \$:不作爲標量,例如\${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\nlinestwo\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測試用例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章