Skip to content

Instantly share code, notes, and snippets.

@oiuww09fn
Last active August 29, 2015 13:56
Show Gist options
  • Save oiuww09fn/9321357 to your computer and use it in GitHub Desktop.
Save oiuww09fn/9321357 to your computer and use it in GitHub Desktop.
创建测试文件
1 测试文件语法
1.1 测试用例文件和目录的组织层次结构:
测试用例在测试用例文件中创建;一个测试用例文件自动的创建一个包含文件中所有测试用例的测试集;一个包含测试用例文件的目录构成一个更高级的测试集,这个测试集(目录)包含每一个测试用例文件形成的子测试集;测试集目录可以包含子测试集目录,子测试集目录又可以包含孙子测试集目录,只有需要,可以嵌套多层;测试集目录可以有一个特殊的初始化文件(__init__.txt,类似于python)。
此外:测试库包含最低级的关键字;资源文件包含变量和更高级的用户自定义关键字;变量文件提供比资源文件更灵活的定义变量的形式。
1.2 支持文件格式:
Robot Framework的测试数据被定义为表格形式,支持HTML\TSV\reST\Txt(从2.7.6开始,txt文件后缀名可以为.robot,方便与普通txt文件区分)。Robot Framework根据文件后缀判断文件类型,进行解析。后缀名不区分大小写。
因为txt文件可以很方便的用各种编辑器编辑,并且能很好的进行版本控制,所以它成为了使用最多的数据格式。
# TODO 本文推荐使用txt文件,并且本文暂且只详细讲解txt文件的书写规范。
最最基本的,txt文件中单元格的分隔符有两种:两个或多个空格;前后有空格的管道符。测试用例文件中可包含四个表格:Settings\Variables\Test Cases\Keywords,每个表格名称前必须有至少一个星号。第一个表之前的任何东西都会被忽略,但最好不要在前边瞎写东西,别找麻烦。
推荐:用四个单元格作为分隔符,像python那样;表头格式:*** Settings ***;所有文件编码都用UTF-8。
注:使用空格做分隔符时,所有有意义的空格都要通过反斜线或者${SPACE}全局变量转义。
在一个txt文件中分隔符空格和管道可以混用,但在一行中只能用其中一种。用管道分隔的行,行首的管道符必须有,结尾的可有可无。管道符的两侧至少有一个空格(开头和结尾的管道符除外)。
1.3 测试用例表格:
Setting table:导入测试库、资源文件、变量文件,为测试集和测试用例定义元数据。有效的表名:Settings\Setting\Metadata。
Variable table:定义变量,此处变量可用在测试数据的其他地方。有效表名:Variables\Variable。
Test case table:创建测试用例。有效表名:Test Cases\Test Case。
Keyword table:用低级别关键字创建更高级关键字。有效表名:Keywords\Keyword\User Keyword\User Keywords。
1.4 解析测试数据的规则:
Robot Framework在解析数据的时候,以下数据将被忽略
第一个单元格不是以1.1.3中有效表名开头的所有单元格。
表格第一行除了第一个单元格的所有东西。
第一个表前面的所有数据。如果数据格式允许表格之间存在数据,这些数据也被忽略。
所有空行。(在测试数据中适当加空行,可增加测试用例文件可读性)
行末的所有非转义空单元格。
所有单独的反斜杠(\)。(输入单反斜杠用\\)
#号后的所有字符。(井号用于注释)
在用HTML\reST时,所有与格式定义相关的数据。
被Robot Framework忽略的数据不会显示在测试结果报告中,大部分Robot Framework的第三方工具也会忽略这些数据。所以想使某些信息出现在结果报告中,要写成documentation或者测试用例测试集的元数据,或者用内置关键字Log。
处理空格
Robot Framework处理空格的方式和HTML源码中空格处理方式是一样的:
换行符、回车和制表符被转换成空格。
所有单元格开头结尾的空格被忽略。
连续多个空格转换为一个空格。
除此之外,非换行空格被普通空格替换。这样避免了当一个非换行空格意外地被作为一个普通空格使用时难以调试的问题。如需换行符、回车、制表符、非换行空格时请使用转义序列:\n,\r,\t,\xA0。
转义
Robot Framework中转义字符为反斜杠(\),另外内置变量${EMPTY}和${SPACE}也常被用来做转义。
转义特殊字符: \$, \@, \%, \#, \=, \|, \\
两/四/八位十六进制字符: \xhh, \uhhhh, \Uhhhhhhhh(从2.8.2版本开始)
注:
所有字符串都是Unicode字符串,如果需要byte strings,需用关键字Encode String To Bytes显示转换。
如果\x,\u,\U后跟无效的十六进制值,得到的结果是去掉反斜杠后的字符串。
跨平台的换行符可用内置变量${\n}实现。
紧跟\n后的未转义空格将被忽略。
在txt文件中空单元格都要用\或${EMPTY}转义,特别注意for循环从第二行开始每行第一个单元格都要用反斜杠转义。
将测试数据拆分为多行
如果测试数据写成一行太长,可以拆分为多行,使用省略号(...)。在测试用例和用户关键字表格中,省略号前必须至少有一个空单元格。在设置和变量表中,省略号可直接放在表名下面。所有表格中,省略号前的所有单元格都将被忽略。
此外,一个单独的值也可以写成多行,在执行时Robot Framework会自动将多行合并成一行。从2.7开始,如果documentation和测试集元数据被分为多行,那它们的实际效果就是多行。
2 创建测试用例
2.1 基本语法
测试用例是在测试用例表格中用关键字组织起来的。理论上关键字可以使测试库、资源文件或者在关键字表格中定义的关键字,但推荐使用资源文件或者关键字表格中定义的用户关键字,不推荐使用测试库提供的基本关键字(这句原文档没有,把测试库提供的关键字组织成高级别的通俗易懂的关键字,这样测试用例读起来也容易)。
测试用例表格第一列是case name,后变的列可以是关键字或者变量。有返回值的关键字,如果想获得返回值那就在关键字前面一个表格提供一个临时变量名称。
测试用例表格中可有以下几种设置项:[Documentation] [Tags] [Setup] [Teardown] [Template] [Timeout]
看单词就能猜出他们都是干什么的吧:第一个Documentation是给测试用例加注释的,但好的测试用例不需要只是,所以它基本没用;第二个Tags加标签的;第三四个效果同python unittest中的setup、teardown,测试前后执行,用于准备恢复测试环境;第五个Template,这个设置后跟某个需要传参数的关键字,后边值提供一组组参数就行,是为数据驱动;Timeout设置超时。
注:设置名称用中括号括起来,总是在一行的第二个单元格,也就是第二列,后面几列跟值。
设置表格中与测试用例相关的设置:
Force Tags,Default Tags,Test Setup,Test Teardown,Test Template,Test Timeout
这些设置会被测试用例中的相应设置覆盖。特别要说的是,Test Setup和Test Teardown会在每条case开始结束都运行一遍!
2.2 使用参数
传参数,关键字后跟两个以上空格,然后要传几个参数就写几个单元格就行了。有些参数有默认值,可传值也可不传,方法和普通的一样。实际上所有参数都可以有默认值,但带默认值的参数后边不能再有其他参数。另外Robot Framework支持可变数目的参数,在定义时可变数量的参数前带星号,并且这种参数必须放最后。
另外还有一种参数叫命名参数,它和默认参数相似,只不过等号后可不带默认值。
带默认值的参数和命名参数传值的时候可用=形式,比如有三个命名参数时,可以不管前两个,直接给第三个参数赋值。另外命名参数是大小写敏感的,并且等号两边不能随便加空格。使用命名参数时,${}都不要了,直接写里面的参数名=参数值,如${one}, 传值时直接写one=hello。
# TODO named arguments
Free keyword arguments,这种参数和可变数目参数对应,可变数目参数传递的是一个序列,而这种参数传递一个字典。在定义时前面带两个星号。从版本2.8.3开始,支持所有类型测试库,但暂且不支持用户关键字。
2.3 失败
一个测试用例执行失败,一般正常情况下后边的关键字就不执行了,继续执行下条case。当然即使失败,teardown中的关键字也是会执行的。可以使用关键字或设置使测试用例失败时继续执行。
关于Error Messages,大部分关键字带默认的messages,有些特别是带should的关键字可以由用户设置错误信息。从2.8开始错误信息可通过在信息前加*HTML*来增加HTML信息。
2.4 测试用例名称和文档
测试用例名称尽可能清晰,通俗易懂,最好不要用到文档。如果一个测试用例需要加文档注释,说明这个测试用例不够好,里面的关键字还需改进。另外,一些原数据,如环境、用户信息最后用标签指定。
2.5 为测试用例添加标签
使用标签,通常有以下几点好处:
tag可以显示在测试报告和日志中,在测试文件中,可为测试用例提供元数据。
用于测试用例的统计(可以给予tag自动收集测试用例总数、pass和fail的测试用例)。
在运行测试用例的时候可以指定某些带特定tag的测试用例执行。
可用于指定测试用例的级别。
设置tag的方法:
Force Tags:在Setting table中设置所有case的tags,可用户测试集目录初始化文件中。用次方法,在具体的测试用例中设置的tag就无效了。
Default Tags:在Setting table中设置,可被testcase中的tag覆盖。
[Tags]:在Test Cases目录中设置。
--settag:命令行设置
另外可以通过关键字设置:Set Tags, Remove Tags, Fail and Pass Execution keywords
2.6 Setup和Teardown
用法:在设置表格中通过Test Setup和Test Teardown设置;在测试用例中通过[Setup]和[Teardown]设置。
Setup、Teardown后一般跟一个关键字,如果需要跟多个关键字有两种方法:定义一个更高级的关键字;使用Run Keywords。注意在设置表格中定义的setup,teardown在每条case运行时都运行一次,如果不希望它们运行,可用case中的setup、teardown覆盖设置表格中的。
2.7 测试模版
用法:在设置表格中通过Test Template设置;在测试用例中通过[Template]设置。测试用例中的模版会覆盖设置表格中的模版。
如果一个测试用例中设置了测试模版,那这个测试用例就有关键字驱动变为了数据驱动。也就是说只提供关键字的参数就行不用写关键字的名称。关键字模版支持各种参数类型的关键字,包括内嵌式的。测试模版也可与for循环配合使用,循环体中的数据作为参数。
2.8 三种测试用例形式
关键字驱动:用于测试一个流程,Robot Framework中主要用到的。
数据驱动:通过测试模版设置一个关键字,通常为用户定义的封装了复杂过程的高级关键字,在测试的时候只需提供一组组数据就行。通常用于测试相同的流程不同的输入输出时用到。
行为驱动: # TODO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment