85.Robot Framework测试数据基本语法

文章目录

  • 文件和目录
  • 测试数据表
  • 测试数据文件格式
    • 纯文本格式
      • 空格分割符
      • 管道符分割符
    • reStructuredText格式
      • 使用代码块
  • 数据解析规则
    • 忽略的内容
    • 转义
      • 空单元格
      • 空格
    • 测试数据跨行

转载请注明原始链接: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 选项配合不同的数据文件格式(.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测试用例。

你可能感兴趣的:(自动化测试)