Robot Framework 用例的执行、参数文件、测试用例标签

Robot Framework 的命令格式

robot [options] data_sources

  • optionsRF 命令的选项,可以为空

  • data_sources 则是要执行的测试套件文件或者目录的路径。可以是绝对路径,也可以是相对路径,相当与当前 shell 的工作目录

robot tests.robot
robot path/to/my_tests/
robot c:\robot\tests.robot

如果指定的是测试套件文件,则执行该文件中所有的测试用例。 如果指定的是测试套件目录,则递归执行该目录下包含的所有的子目录里面所有测试套件文件里面的用例。不管是执行测试套件文件还是目录, RF 认为本次测试的名字就是 data_sources 参数。

比如我们刚刚执行的。

robot --pythonpath . tc

我这样执行完之后我们看一下它的测试报告。生成的测试报告它有一个名字。

image.png

有个 Tc 作为名字,这个 Tc 就是我们这次测试指定的测试源。所以它测试报告的名字就叫 Tc 了。,如果你不希望它用这种名字,你可以给他指定一个名字。就用参数 --name

--name

比如我们叫做 回归测试 对应的命令是

robot --name 回归测试 --pythonpath . tc

这样执行完之后生成的测试用例它就有自己的名字了。


根据名称选择测试用例

前面我们学过选择测试用例的时候,比如说你不是整个测试套件所有的测试用例都要执行。我们可以通过 --test 来选择。比如说你只执行某一个测试用例,就可以 --test 加上这个测试用例的名字。

--test Example # 执行名为example的用例

什么是用例的名字?就是这个地方。


image.png

如果我们想执行测试1,就 --test 测试1 就不会执行 tc 下面所的测试用例了,只执行这一个了。

如果你想选择的不是某一个测试用例,而是某一个测试套件,比如测试套件的名字和测试目录的名字,那就用 --suite 就可以了。比如说我们这个执行,我不要执行所有我只要执行老师管理,就可以这样写

--suite 老师管理

那它就执行老师管理下面的所有的用例。

有的用例名字比较长或者有些空格比较麻烦,通常我们会给用例编号,就是每个用例都给它加一个编号。比如说添加课程里面的用例测试1我们给它加上编号 tc0001,另一个叫 tc0002。注意这个编号要跟我们手工写的用例里面的编号一致。这个时候你在想执行某个用例就更简单了,不用写名字那么麻烦了,直接根据它的编号就可以了,注意编号是属于名字的一部分,这个时候你不想带着前面的,你只想带着编号,那前面就可以用通配符 *

--test *0002 # 执行名字以0002结尾的测试用例

这样写就可以了:

robot --name 回归测试 --test *0002 --pythonpath . tc

* 可以放在前面也可以放置在后面。

这样做有一个好处,当你们测试自动化的时候,有可能你的测试用例的管理系统比如说 TestLink 或者 Excel ,它可能会让你来挑选自动化要执行的用例,并不是所有的用例都要执行,只需要执行其中的一部分,这个时候你就可以这样。比如说你是用 Excel 里面挑选用例的,它可能实现一个什么功能呢?,Excel 也是支持编程的用的是 vb 什么的,在界面上点选之后,它可以把要执行的用例生成这样一个列表。

image.png

我们对应的就可以根据测试用例的编号的列表来写上对应的命令。

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

image.png
> --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

看个例子:

image.png

比如说这个 登录.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

image.png

因为它是管理员,所以我们可以给个 admin 标签。所有管理员登录这个目录里面所有的套件文件里面所有的用例都具备了 admin 标签。这个就跟前面说的初始化清除差不多。

同样的老师功能里面也有 Force Tags

image.png

teacher 那所有的登录目录里面的 登录.robot 用例全部都具有 teacher 标签,如果它有子目录,那子目录也都具有。

根据标签选择测试用例

执行包含标签 foo 的用例。

--include foo

执行不包含标签 foo 的用例

--exclude foo

执行同时包含标签 oneweb test 的用例

--include oneAND"webtest"

执行包含标签 one 或者 two 的用例

--include oneORtwo

执行包含 one 但是不包含标签 two 的用例。

--include oneNOTtwo

执行标签格式为 W*W 的用例

--include W*W

举个例子像我们现在这个目录结构里面。这个 webtest 本身是有标签的。整个 webtest,这里面所有的子目录子套件里面的用例全都具有 webtest标签。

image.png

本身管理员登录和老师功能又各自具有 admin 标签和 teacher 标签。现在假如说我执行这个命令

robot --pythonpath . --include web测试 "webtest"

所有的用例都会被执行到。

假如我现在执行的标签名字叫冒烟测试

robot --pythonpath . --include 冒烟测试 webtest

也会全部执行,因为老师功能的 登录.robot 和管理员登录 登录.robot 都有冒烟测试标签。

假入我现在执行的是

robot --include adminANDteacher webtest

同事具有 adminteacher,我们这里没有这样的用例,所以就一个用例都不执行。

指定关键测试用例

  • 什么叫关键用例?
    如果说你这个测试用例能够影响整个测试的执行是否通过的,那就称为关键用例,就是说你这个用例失败了,整个用例就失败了。

RF 执行时,可以指定用例是否是关键测试(critical)用例。如果本次测试中有关键测试用例没有通过,那么整个测试就被视为不通过(哪怕是100个中只有一个关键用例没有通过)。反之,整个测试就视为通过(哪怕是100个中有99个非关键用例没有通过,只有1个通过)。

  • 缺省情况下,RF 执行测试时,每个测试用例都被视为关键测试用例。

例子:我们看下我们刚才执行的测试用例里面,我们看它生成的测试报告:

image.png

整个都是红色的背景,因为所有的用例都是关键用例,只要有一个不通过他就不通过了。红色背景就是被认为整个测试用例为不通过。

  • 我们可以通过命令参数 --critical--noncritical 后面加 tag 名称来指定测试用例是否为关键测试用例。

比如刚才的测试,我们再加上一个参数,比如只有 10002 是关键用例,其它都不是,我就可以加一个 10002 的标签,注意它是根据标签来选的

robot --pythonpath . --critical 10002 --include web测试 webtest

可以看到执行结果,关键用例有一个,总共有6个,这个时候你看下即使有失败的,但实际上你去看 log 它整个就是绿色的,虽然你这里也有失败的,但是没关系,关键用例只有一个,关键用例 10002 只要成功了,整个测试就是成功的。其他的即使全失败也没关系,其它都不是关键用例。

image.png

比如:指定 只有具有 regression 标签的用例才是关键用例 其它都不是

--critical regression 

指定 不具有 not_ready 标签的用例是关键用例,其他用例都不是关键用例。

--noncritical not_ready 

指定 具有 以 ok 开头的标签 且 没有以 tbd 开头的标签 的用例都是关键用例,其他用例都不是是关键用例。

--critical ok*  --noncritical tbd*

通常我们可以在关键用例中打上标签 ,比如 basic 、important,critical 表示是关键用例,这样就可以方便的直接标明用例是否为关键用例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349