Robot Framework 的命令格式
robot [options] data_sources
options 是 RF 命令的选项,可以为空
data_sources 则是要执行的测试套件文件或者目录的路径。可以是绝对路径,也可以是相对路径,相当与当前 shell 的工作目录
robot tests.robot
robot path/to/my_tests/
robot c:\robot\tests.robot
如果指定的是测试套件文件,则执行该文件中所有的测试用例。 如果指定的是测试套件目录,则递归执行该目录下包含的所有的子目录里面所有测试套件文件里面的用例。不管是执行测试套件文件还是目录, RF 认为本次测试的名字就是 data_sources 参数。
比如我们刚刚执行的。
robot --pythonpath . tc
我这样执行完之后我们看一下它的测试报告。生成的测试报告它有一个名字。
有个 Tc 作为名字,这个 Tc 就是我们这次测试指定的测试源。所以它测试报告的名字就叫 Tc 了。,如果你不希望它用这种名字,你可以给他指定一个名字。就用参数 --name
--name
比如我们叫做 回归测试 对应的命令是
robot --name 回归测试 --pythonpath . tc
这样执行完之后生成的测试用例它就有自己的名字了。
根据名称选择测试用例
前面我们学过选择测试用例的时候,比如说你不是整个测试套件所有的测试用例都要执行。我们可以通过 --test 来选择。比如说你只执行某一个测试用例,就可以 --test 加上这个测试用例的名字。
--test Example # 执行名为example的用例
什么是用例的名字?就是这个地方。
如果我们想执行测试1,就 --test 测试1 就不会执行 tc 下面所的测试用例了,只执行这一个了。
如果你想选择的不是某一个测试用例,而是某一个测试套件,比如测试套件的名字和测试目录的名字,那就用 --suite 就可以了。比如说我们这个执行,我不要执行所有我只要执行老师管理,就可以这样写
--suite 老师管理
那它就执行老师管理下面的所有的用例。
有的用例名字比较长或者有些空格比较麻烦,通常我们会给用例编号,就是每个用例都给它加一个编号。比如说添加课程里面的用例测试1我们给它加上编号 tc0001
,另一个叫 tc0002
。注意这个编号要跟我们手工写的用例里面的编号一致。这个时候你在想执行某个用例就更简单了,不用写名字那么麻烦了,直接根据它的编号就可以了,注意编号是属于名字的一部分,这个时候你不想带着前面的,你只想带着编号,那前面就可以用通配符 *
。
--test *0002 # 执行名字以0002结尾的测试用例
这样写就可以了:
robot --name 回归测试 --test *0002 --pythonpath . tc
*
可以放在前面也可以放置在后面。
这样做有一个好处,当你们测试自动化的时候,有可能你的测试用例的管理系统比如说 TestLink 或者 Excel ,它可能会让你来挑选自动化要执行的用例,并不是所有的用例都要执行,只需要执行其中的一部分,这个时候你就可以这样。比如说你是用 Excel 里面挑选用例的,它可能实现一个什么功能呢?,Excel 也是支持编程的用的是 vb 什么的,在界面上点选之后,它可以把要执行的用例生成这样一个列表。
我们对应的就可以根据测试用例的编号的列表来写上对应的命令。
robot --pythonpath . --test *tc00001 --test *tc00002 --test *tc00003 --test *tc00004 --test *tc00005 t1.robot
大家自然会想到,如果有的时候,个数太多,参数岂非太长了?我们通常可以使用参数文件。
参数文件
如果有的时候,参数太长,我们通常可以使用参数文件,我们可以把所有的参数都放在参数文件中,比如我们这里有个叫 arfilename
。
--pythonpath .
--name 回归测试
--test *tc00001
--test *tc00002
--test *tc00003
--test *tc00004
--test *tc00005
t1.robot
文本件叫什么名字无所谓,文件的内容是每一个参数放一行比如说 --pythonpath . 放一行,--name 回归测试 放一行,每个测试放一行,最后放上测试的数据源。命令就只要:
robot -A arfilename
比如我们这边有个例子,我们这边有个参数文件 args.txt
> --pythonpath .
--name 回归测试
--test *tc00001
--test *tc00002
--test *tc00005
t1.robot
t1.robot
有五个用例
*** Test Cases ***
用户管理1-tc00001
log to console tc00001
用户管理1-tc00002
log to console tc00002
用户管理1-tc00003
log to console tc00003
用户管理1-tc00004
log to console tc00004
用户管理1-tc00005
log to console tc00005
假如要执行其中1、2、5这三个用例就可以这样写:把参数 --pythonpath .
写在里面,--name 回归测试
名字写在里面,最后写上要执行的数据源 t1.robot
。执行的时候就很简单了直接执行:
robot -A args.txt
就可以执行了。
-A 就是制定参数文件,arfilename 是参数文件名。
通过标签选择测试用例
前面我们已经学习过,通过用例名和套件名来选择测试用例。还有一种选择测试用例的方法,是根据用例的标签。
指定标签
我们可以给测试用例打上标签(Tag),这样在运行的时候,可以通过标签指定要运行哪些用例。测试用例可以有多个标签,我们根据任何一个标签都可以过滤到该用例。
给用例打Tag有如下几种方式:
Setting 表里的 Force Tags, 如果我们在测试套件文件的 Settings 表设置了Force Tags, 那么该套件里面所有测试用例都具有了该tag,如果我们在测试套件目录初始化文件的 Settings 表设置了 Force Tags,那么该套件里面所有测试用例都具有了该 tag。
测试用例表里的 [tags] 配置
很简单,就是该用例的 tag 。Setting 表里的 Default Tags。
如果我们在测试套件文件的 Settings 表设置了 Default Tags ,那么该套件里面所有没有 [tags] 设置的测试用例 都具有了该 tag。
看个例子:
比如说这个 登录.robot
里面 Force Tags 有登录和冒烟测试两个标签,那就意味着下面所有的用例,既有登录又有冒烟测试标签。每个用例里面又有自己的标签,比如说用例 用例10001
它有个 [Tags] 这三个正确用户名、正确密码、10001都是这个用例的标签。从这里看这个用例有五个标签。
用例10002
和用例10003
也有五个,用例1004
它本身没有标签,但是它具备登录和冒烟测试两个标签。这两个标签是对所有的用例都有的。
我们来看用例文件的 Settings 表里面有个Default Tags
,它就是指用例套件文件的缺省标签,就是如果你这个测试套件本身没有标签那就用它,如果你已经有标签了比如说测试用例10001、10002、10003本身就有标签、所以Default Tags notag
这个标签对它没用。因为它只对没有标签的测试用例,所以在这个文件里面看10004
它就具备了三个标签。
同样 Force Tags 不仅可以放在套件文件里面,还可以放在目录里面,比如说管理员登录这个目录 __init__.robot
里面也可以指定 Force Tags 。
因为它是管理员,所以我们可以给个 admin 标签。所有管理员登录这个目录里面所有的套件文件里面所有的用例都具备了 admin 标签。这个就跟前面说的初始化清除差不多。
同样的老师功能里面也有 Force Tags 。
叫 teacher 那所有的登录目录里面的 登录.robot
用例全部都具有 teacher 标签,如果它有子目录,那子目录也都具有。
根据标签选择测试用例
执行包含标签 foo 的用例。
--include foo
执行不包含标签 foo 的用例
--exclude foo
执行同时包含标签 one ,web test 的用例
--include oneAND"webtest"
执行包含标签 one 或者 two 的用例
--include oneORtwo
执行包含 one 但是不包含标签 two 的用例。
--include oneNOTtwo
执行标签格式为 W*W
的用例
--include W*W
举个例子像我们现在这个目录结构里面。这个 webtest
本身是有标签的。整个 webtest
,这里面所有的子目录子套件里面的用例全都具有 webtest
标签。
本身管理员登录和老师功能又各自具有 admin 标签和 teacher 标签。现在假如说我执行这个命令
robot --pythonpath . --include web测试 "webtest"
所有的用例都会被执行到。
假如我现在执行的标签名字叫冒烟测试
robot --pythonpath . --include 冒烟测试 webtest
也会全部执行,因为老师功能的 登录.robot 和管理员登录 登录.robot 都有冒烟测试标签。
假入我现在执行的是
robot --include adminANDteacher webtest
同事具有 admin 和 teacher,我们这里没有这样的用例,所以就一个用例都不执行。
指定关键测试用例
- 什么叫关键用例?
如果说你这个测试用例能够影响整个测试的执行是否通过的,那就称为关键用例,就是说你这个用例失败了,整个用例就失败了。
RF 执行时,可以指定用例是否是关键测试(critical)用例。如果本次测试中有关键测试用例没有通过,那么整个测试就被视为不通过(哪怕是100个中只有一个关键用例没有通过)。反之,整个测试就视为通过(哪怕是100个中有99个非关键用例没有通过,只有1个通过)。
- 缺省情况下,RF 执行测试时,每个测试用例都被视为关键测试用例。
例子:我们看下我们刚才执行的测试用例里面,我们看它生成的测试报告:
整个都是红色的背景,因为所有的用例都是关键用例,只要有一个不通过他就不通过了。红色背景就是被认为整个测试用例为不通过。
- 我们可以通过命令参数 --critical 和 --noncritical 后面加 tag 名称来指定测试用例是否为关键测试用例。
比如刚才的测试,我们再加上一个参数,比如只有 10002 是关键用例,其它都不是,我就可以加一个 10002 的标签,注意它是根据标签来选的
robot --pythonpath . --critical 10002 --include web测试 webtest
可以看到执行结果,关键用例有一个,总共有6个,这个时候你看下即使有失败的,但实际上你去看 log 它整个就是绿色的,虽然你这里也有失败的,但是没关系,关键用例只有一个,关键用例 10002 只要成功了,整个测试就是成功的。其他的即使全失败也没关系,其它都不是关键用例。
比如:指定 只有具有 regression 标签的用例才是关键用例 其它都不是
--critical regression
指定 不具有 not_ready 标签的用例是关键用例,其他用例都不是关键用例。
--noncritical not_ready
指定 具有 以 ok 开头的标签 且 没有以 tbd 开头的标签 的用例都是关键用例,其他用例都不是是关键用例。
--critical ok* --noncritical tbd*
通常我们可以在关键用例中打上标签 ,比如 basic 、important,critical 表示是关键用例,这样就可以方便的直接标明用例是否为关键用例。