尛磊孨

导航

Robot Framework(二)测试数据语法

2.1.1文件和目录

测试数据的层次结构安排如下:

  • 测试数据在测试数据文件中创建。
  • 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件。
  • 包含测试数据文件的目录构成了更高级别的测试套件。这样的测试套件目录具有从测试数据文件创建的套件作为其子测试套件。
  • 测试套件目录还可以包含其他测试套件目录,并且此分层结构可以根据需要进行深度嵌套。
  • 测试套件目录可以有一个特殊的初始化文件。

除此之外,还有:

  • 测试包含最低级别关键字的库。
  • 包含变量和更高级别用户关键字的资源文件。
  • 变量文件提供比资源文件更灵活的方法来创建变量。

2.1.2支持的文件格式

Robot Framework测试数据支持以表格格式定义,使用超文本标记语言(HTML),制表符分隔值(TSV),纯文本或reStructuredText(reST)格式。Robot Framework根据文件扩展名为测试数据选择解析器。扩展名不区分大小写,识别的扩展名为 .html,.htm和.xhtml用于HTML,.tsv 用于TSV,.txt用于纯文本,.rst或 .rest用于reStructuredText。

HTML格式

在HTML文件中,测试数据在单独的表中定义(请参阅下面的示例)。Robot Framework 根据第一个单元格中的文本识别这些测试数据表。忽略已识别表格之外的所有内容。

SettingValueValueValue
Library OperatingSystem    
       
VariableValueValueValue
${MESSAGE} Hello, world!    
       
Test CaseActionArgumentArgument
My Test [Documentation] Example test  
  Log ${MESSAGE}  
  My Keyword /tmp  
       
Another Test Should Be Equal ${MESSAGE} Hello, world!
KeywordActionArgumentArgument
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)中创建和编辑TSV文件。保存文件时选择以制表符分隔的格式,并记住将文件扩展名设置为.tsv。关闭所有自动更正并配置工具以将文件中的所有值视为纯文本也是一个好主意。

使用任何文本编辑器都可以相对轻松地编辑TSV文件,特别是如果编辑器支持从空格中直观地分隔选项卡。RIDE也支持TSV格式。

Robot Framework首先将所有内容拆分为行,然后根据表格字符将行拆分为单元格来解析TSV数据。电子表格程序有时会用引号括起单元格(例如,“my value”),而Robot Framework会删除它们。数据中可能的引号加倍(例如, "my ""quoted"" value"),这也是正确处理的。如果您使用电子表格程序来创建TSV数据,则不需要注意这一点,但如果以编程方式创建数据,则必须遵循与电子表格相同的引用约定。

编码

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}变量或一个反斜杠被转义。否则 会像其他测试数据一样处理空白,首尾的和连续的空格都会被忽略。

管道和空格分隔格式

空格分隔格式的最大问题是在视觉上很难区分关键字的参数。尤其是当关键字占用大量参数或者参数包含空格时问题更加严重。在这种情况下,管道和空格分隔变体可以更好地工作,因为它使单元格边界更加明显。

| *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,您可以混合格式丰富的文档和表格,以简明的文本格式指定测试数据,使用简单的文本编辑器,差异工具和源代码控制系统。

2.1.3测试数据

测试数据由下面列出的四种类型的表组成。这些测试数据表由表的第一个单元格标识,下表中的最后一列列出了可用作表名称的不同别名。

表名用于别名
设置表 1)导入测试库, 资源文件和变量文件 2)为测试套件 和测试用例定义元数据 Setting, Settings, Metadata
变量表 定义可在测试用例中的其他位置使用的变量 Variable, Variables
测试用例表 从可用关键字创建测试用例 Test Case, Test Cases
关键字表 从现有的较低级别关键字创建用户关键字 Keyword, Keywords, User Keyword, User Keywords

2.1.4解析数据的规则

被忽略的数据

当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循环中转义缩进的单元格。
  • 防止链接文档使用换行符拆分为多行。

注意

这些转义规则仅适用于关键字的参数和设置的值。例如,它们不用于关键字和测试数据名称。

处理空白

Robot Framework处理空格(例如空格,换行符和制表符)的方式与在HTML中处理它们的方式相同。这意味着Robot Framework:

  • 删除所有单元格中的首尾空格。
  • 将多个连续空格更改为单个空格。
  • 将所有换行符和制表符转换为空格。

为了防止Robot Framework根据这些规则解析数据,可以使用反斜杠:

  • 在行首空格之前,例如\ some text
  • 在连续的空格之间,例如text \ \ more text
  • 行尾空格,例如一些文本some text \ \
  • 作为\n创建换行符,例如first line\n2nd line
  • 作为\t来创建制表符,例如text\tmore text
  • 作为\r来创建回车符,例如text\rmore text

表示首尾或连续空格的另一种更常见的方法是使用内置变量 ${SPACE}。该扩展变量甚至允许类似语法${SPACE *8},这使得处理连续空格非常简单。

注意

\n后面未转义空白字符会被忽略,以允许包含wrapping换行符的长行。这意味着two lines\nheretwo lines\n here是等价的。此规则的一个例外是在扩展变量中不会忽略空白字符。

将测试数据划分为多行

如果有很多数据,一行容纳不下,则可以使用省略号(...)继续上一行。在测试数据Testcase和用户关键字Keywords表中,省略号前必须至少有一个空单元格。在设置Settings和变量Variables表中,它可以直接放在设置或变量名称下。

在所有表中,省略号之前的所有空单元格会被忽略。

此外,只需一个值(主要是文档Document)的设置值可以拆分为多个列。在解析测试数据时,这些值将与空格一起连接。从Robot Framework 2.7开始,分成多行的文档和测试套件元数据将与换行符一起链接。

 

posted on 2019-06-25 15:51  尛磊孨  阅读(891)  评论(0编辑  收藏  举报