声明:
1.此文档是和重庆同事的共同劳动成果,不是我一个人翻译的。
2.依据RobotFramework2.6.3版本翻译,由于水平有限,时间仓促,难免有错误,请大家不吝指出。
专用名词:
Test Data :测试数据
Test Suite :测试套件
test suite directory 测试套件目录
test library :测试库
escape : 转义
separater :分隔符
output :输出 (这里指 Report 和Log)
space :空格字符
whitespace :占位字符 (空格,换行,制表符)
preamble:报文头
---------------------------------------------------------------------------------------------
原文链接:
http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.6.3#id314
--------------------------------------------------------------------------------------------
翻译部分
本节描述了RF测试数据的总体语法规则。后面的章节中将解释怎么真正的创建测试用例、测试套件等
2.1.1文件和目录
2.1.2 支持的文档格式
2.1.3 测试数据表格
2.1.4数据解析规则
组织测试用例的层级结构是按照下面规则构建的:
· 测试用例存放在测试用例文件中
· 测试用例文件自动创建一个包含该文件下所有测试用例的测试套件。
· 包含测试用例文件的目录形成一个更高等级的测试套件。此测试套件目录,将本目录下测试用例文件生成的所有测试套件作为其子套件。
· 测试套件目录也可以包含其它测试套件目录,并且可以根据需要对其进行任意深度的嵌套。
· 测试套件目录可以包含一个特殊的初始化文件。
除此之外:
· 测试库包含用户基本关键词。
· 源文件包含变量和高级用户关键词。
· 变量文件提供比源文件更为灵活的创建变量方法。
Robot Framework测试数据以表格形式进行定义,可以使用的格式包括超文本标记语言(HTML),制表符分隔值(TSV),纯文本或者新结构化文本(reST)。
Robot Framework根据文件的扩展名来为这些以不同格式存储的测试数据选择解析器。扩展名不区分大小写,可识别的扩展名包括HTML的.html,.htm和.xhtml,TSV的.tsv,纯文本的.txt和新结构化文本的.rest。
针对HTML和TSV格式有不同的测试数据模板,使你轻易就可以开始动手编写用例。
HTML格式
在HTML文件中,测试数据通过分隔的表格进行定义(见下例)。Robot Framework基于首个单元格里的文本来识别这些测试数据表。所有可识别表格之外的参数都自动忽略。
使用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} |
编辑测试数据
你可以使用任何你喜欢的编辑器来编辑HTML文件中的测试数据,但是推荐使用可以实实在在看到表格的图形化编辑器。还有一个叫做RIDE的工具,它专门用来编辑测试数据。
编码与实体引用
支持HTML实体引用(例如,ä)。此外,只要在参数文档中有明确定义,任何编码格式都可以使用。标准HTML文档必须使用META元素,如下例:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
XHTML文档应该使用XML报文头(preamble),如下例:
<?xml version="1.0" encoding="Big5"?>
如果没有明确定义编码格式,Robot Framework默认使用ISO-8859-1。
TSV格式
在Robot Framework中也可以使用TSV格式达到和HTML格式同样的效果。在一个TSV文档中,所有的数据都在一个大表格中。测试数据表格通过一个或者多 个星号(*)开始,紧跟一个标准的表格名和一个可选的标识结束的星号被识别出来。所有在首个可识别表格之外的数据和表格之外的HTML数据一样,将被自动 忽略。
使用TSV格式
*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} |
编辑测试数据
你可以通过任何一个电子制表程序编辑一个TSV文档,例如Microsoft Excel。选择制表符分隔格式,保存文件的时候记得将文件扩展名设置为.tsv。还有一个好建议是关掉自动修订,使工具把文档里的所有值都当成纯文本。
通过文本编辑器编辑TSV文档相对容易一些,尤其是如果这个编辑器可以很直观地区分制表分隔符和空格的话。TSV文档也支持通过RIDE进行编辑。
Robot Framework是以如下方式解析TSV中数据的:首先把内容拆分成行,再根据表格里的字符把行拆分成单元格,电子制表程序有时会给单元格内容添加引号(如,“my value”),RF会将引号去除,有时候括号会成对出现在一起,RF可以正确处理这种情况。
如果使用一个电子制表程序创建TSV参数,你不需要太关注这一点,但是如果你是通过编程的方式创建参数,你必须遵循和电子数据表一样的引用规则。
编码
TSV文档通常使用的是UTF-8编码。因为ACSII属于UTF-8的子类,因此ASCII编码也是被支持的。
纯文本格式
纯文本格式与TSV格式有点类似,但是在每个单元格之间的分隔符的有所区别。TSV格式使用的是制表分隔符Tabs,但是纯文本中你可以通过两个或者更多空格或者两侧带空格的竖线( | )进行分隔。
同TSV格式相似,每个测试数据表之前都必须有一个或者多个星号。其它部分的星号和空格会被自动忽略,举例来说,***Settings*** 和 *Settings 的作用是一样的。同TSV格式相似的另一个地方是:所有第一个数据表前的的数据都会被忽略。
在纯文本文件中字符“Tab”会自动被转化为两个空格。所以我们能够使用“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}
因为空格键被用作分隔符,所有的空白单元都必须使用${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}
在一个纯文本文件可以同时包含“只用空格分隔”和“用空格和管道符一起分隔”的测试数据,但单行必须始终使用相同的分隔符。RF依靠行首必须使用的“|” 字符识别管道符和空格分隔行。但在该行的末尾的管道符是可选的。在管道符的两侧都必须有一个空格,但是除非为了让数据显得清晰,没有必要对齐。
在使用管道符合空格分隔格式的时候,没有必要转义空置单元格(除非是末尾的空置单元格)。唯一要考虑的是,在实际测试数据中被空格符围绕的管道符必须用一个反斜杠转义:
${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和RF,你能够将各种格式的文档和表格混合,这样就能够用一种简洁的文本格式定义测试数据,这样的测试数据也容易被文本编辑器,文本比 较工具,源代码控制系统使用。
用来处理reStuctredText的工具是doccutil项目的一部分(前面连接下载),你可以参阅它的快速使用说明(quick reference guide)来查看最常见的格式组织形式,当然也包括RobotFramework使用的表格格式。注意,RobotFramework在真正解析测试数据之前会将reST格式转化成HTML。所以测试数据必须严格依照reST语法,否则解析将会失败。
注意 使用Robot Framework中的reST文件需要安装Python的docutils的模块。 |
---|
在reST的文件中,测试数据定义在表内,类似于HTML格式。RobotFramework根据表中的第一个单元格识别测试数据表,被识别的表以外的数据将被忽略
下面例子包含四张适中reST简单表格语言的测试数据表。注意每行的第一个空白单元格必须使用\或者..
============ ================ ======= =======
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}
============ ====================== ============ ==========
编辑测试数据
reST文件的测试数据可以用任何文本编辑器编辑。这里推荐能够设置等宽字体的文本编辑器,,以帮助对齐表格元素。
请注意,RIDE不支持直接编辑reST源文件中的测试数据。
使用reST时的临时文件
不同于HTML或TSV格式,Robot Framework不直接解析reST文件。相反,docutils自动将reST源文件转化成HTML临时文件后由Robot Framework读取。这些临时文件被读取后立刻被 RF删除,不需要用户直接调用docutils的工具。
reST源文件中的语法错误
如果reST文件是存在语法错误(例如,一个格式有错误的表),将不能完成从reST到HTML的转化,也没有测试用例会从该文件被读取。当这种情况发生时,Robot Framework将docutils的错误消息显示在控制台输出,显示文件名、行号、源码上下文和错误类型。
测试数据由以下4种表格组成。这些测试数据表以第1单元进行命名,最后一列列出了不同的别名。这些别名也被用作表名。
不同的测试数据表格:(由于真正使用的时候要用英文单词,所以这部分不用翻译)
表格名称 | 作用 | 别名 |
---|---|---|
Setting表 | 1、 加载测试库文件、资源文件和变量文件; 2、 为测试文件和测试用例定义中间变量; | Setting, Settings, Metadata |
Variable表 | 变量定义,这些变量能在整个测试数据中使用。 | Setting, Settings, Metadata |
Test Case表 | 利用存在的关键字创建测试用例; | Test Case, Test Cases |
Keywords 表 | 利用已存在的低级关键字创建用户级关键字; | Keyword, Keywords, User Keyword, User Keywords |
忽略的数据
当Robot FrameWork解析测试数据时,当通常会忽略下面内容:
1、 所有没有在第一个单元格使用可被识别的表名(2.1.3节中列出)的表;
2、 表格第1行中不在第一个单元格中所有的内容;
3、 HTML/reST中表外的数据和TSV中第一个表格前的数据;
4、 所有用作增加可读性的空行;
5、 每行最后为空的单元格;你必须增加1个”\”以防这些单元格被忽略掉;
6、 所有单个反斜杠(\); 他们被认为是转义符;
7、 #号,如果在一个单元格的最开始使用它,就说明这个单元格里是注释内容;
8、 HTML/reST中所有格式化的数据;
当Robot FrameWork忽略某些数据时,在任一个测试结果报告中这些测试数据将不显示出来。除此之外,同Robot Framework一起使用的大多数工具也忽略这些数据。为了在Robot Framework输出中增加一些可见的数据。在RIDE中,把它放置在文档描述、测试用例或测试套件的一些元数据中,或者使用BuiltIn库里的Log或者Comment关键字。
Escaping(转义)
Robot Framework的转义字符是反斜杠(\)。
转义字符的使用方式如下:
注意
这些转义规则只适用于关键字和设置的参数值。其他情况不能使用转意规则,例如,关键字和测试用例名。
Handling whitespace(处理占位字符字符)
Robot Framework处理占位字符,例如空格,换行符和制表符,与其在HTML中的处理方式一致。这意味着Robot Framework:
· 会在所有单元格中除去开头和结尾的空格(相当于Trim()函数)
为防止Robot Framework按照以上规则来解析数据,可以使用反斜杠
另外,,前置,后置,或连续空格可以使用内置变量{SPACE}清晰的表示。可扩展的变量语法,甚至允许像{SPACE * 8}这样的语法,可以使连续空格的处理变得非常简单。
注意
\n后可能存在为转义的空格也会被忽略掉掉以便能够在单行中书写多行数据。这意味着two lines\nhere与two lines\n here是等价的。此规则的例外是,空格在扩展变量语法里是不被忽略的。
将测试数据分行
如果数据过长,需要换行,可以使用省略号(…),表示延续前一行的内容。在测试用例与用户关键字表中,省略号前必须至少含有一个空单元格。在setting与变量(variable)表中,省略号可直接填入setting name或者变量名称(variable name)单元格中。
所有表格中,会忽略省略号前的所有空单元格。
此外,Setting部分的取值可以被写到多个表中(主要是由Documents关键字使用)。解析测试数据时,这些数据会被连接起来,中间加一个空格。
以下将举例说明这些语法。在前三个表中,显示分行前的测试数据。由后三个表可以看出,将测试数据分行显示后,只需要较少的列。
分行前的测试数据
Setting | Value | Value | Value | Value | Value | Value |
---|---|---|---|---|---|---|
Dafault Tags | Tag-1 | Tag-2 | Tag-3 | Tag-4 | Tag-5 | Tag-6 |
Variable | Value | Value | Value | Value | Value | Value |
---|---|---|---|---|---|---|
@{LIST} | this | list | has | quite | many | items |
Test Case | Action | Argument | Arg | Arg | Arg | Arg | Arg | Arg |
---|---|---|---|---|---|---|---|---|
Example | [Documentation] | Documentation for this test case. This can get quite long... | ||||||
[Tags] | t-1 | t-2 | t-3 | t-4 | t-5 | |||
Do X | one | two | three | four | five | six | ||
${var} = | Get X | 1 | 2 | 3 | 4 | 5 | 6 |
分行后的测试数据
Setting | Value | Value | Value |
---|---|---|---|
Dafault Tags | Tag-1 | Tag-2 | Tag-3 |
… | Tag-4 | Tag-5 | Tag-6 |
Variable | Value | Value | Value |
---|---|---|---|
@{LIST} | this | list | has |
… | quite | many | items |
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Example | [Documentation] | Documentation | for this | test case. |
… | This can get | quite | long... | |
[Tags] | t-1 | t-2 | t-3 | |
… | t-4 | t-5 | ||
Do X | one | two | three | |
… | four | five | six | |
${var} = | Get X | 1 | 2 | |
… | 3 | 4 | 5 | |
… | … | 6 |
注:一般只有Robot Framework2.5.2或者更新的版本才允许省略号前存在空单元格。在早期的版本中,只允许在for循环内部,存在一个前置的空单元格。
拆分reSt表中的数据
在标记reST表格的纯文本文档中,有两种可以创建测试数据的表格语法。RF规定,当使用简单表格语法时,除了...以外,续行第一个单元格必须使用\ or ..。下面是一个使用reST简单表格的格式例子:
对于方格式语法,续行首个单元格可以为空,当其是HTML表格时,第二个单元格需要包括...。