单元测试界的高富帅,Pytest框架,用例标记和测试执行怎么做

一、pytest 中内置的标记

pytest 标记使用需要通过 pytest.mark.标记 来使用,pytest 中为应对各种测试场景也内置了很多的标记。

1.1、pytest.mark.parametrize:用例参数化的标记

通过 parametrize 可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。

Demo:

@pytest.mark.parametrize('item',[11,22,33,44,55,66])deftest_demo(item)assert item >50

1.2、pytest.mark.skip:跳过用例执行

通过 skip 装饰的用例,在执行的时候会无条件跳过,

参数 reason:跳过测试函数的原因。

Demo

# 不写跳过原因@pytest.mark.skipdeftest_demo()assert item >50# 写跳过原因@pytest.mark.skip(reason='不需要执行')deftest_demo()assert item >50

1.3、pytest.mark.skipif:根据条件跳过用例

skipif 可以根据条件来决定是否跳过用例的执行, 如果条件为 True 则跳过测试函数执行。

参数 :condition —跳过的条件

参数 :reason —跳过的原因

Demo

a =10@pytest.mark.skipif(a >20,reason='条件不成立,不执行')deftest_demo()assert item >50

1.4、pytest.mark.xfail:标记预期失败的用例

xfail 可以将测试函数标记为预期执行失败的用例。

参数 :condition — 将测试函数标记为 xfail 的条件(True/False )

参数 :reason — 测试函数被标记为 xfail 的原因

参数 :raises — 预期失败的异常类型

参数 :run — 是否应该实际执行测试函数。如果 False,该函数将始终 xfail 并且不会被执行 。

参数 :strict — 严格模式(True/False )

Demo

a =10@pytest.mark.xfail(a >20,reason='条件不成立,不执行'raises=AssertionError )deftest_demo()assert item >50

1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具

usefixtures 标记一般用于给测试类下面的测试方法统一设置测试夹具。

Demo

# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具@pytest.mark.usefixtures('my_fixture这个夹具')classTestDome:# 函数用例 指定测试夹具deftest_02(self):        print('----测试用例:test_01------')# 函数用例 指定测试夹具deftest_03(self):        print('----测试用例:test_02------')

二、自定义标记

pytest 支持通过 pytest.ini 文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选。,

2.1、注册标记

pytest.ini 文件注册标记的语法如下:

[pytest]markers =    标记1标记2

2.2、标记函数

Demo:

# 用例前面加载标签:@pytest.mark.标签名  @pytest.mark.maindeftest_demo():pass

2.3、标记类

Demo:

# 方式一:直接类上面打标记@pytest.mark.mainclassTestClass(object):deftest_demo1(self):assert10>20# 方式二:通过类属性pytestmark,可以同时添加多个标记classTestClass(object):pytestmark = [pytest.mark.main, pytest.mark.main]deftest_demo1(self):assert10>20

三、通过标记筛选用例执行

Demo:现有用例如下:

importpytest@pytest.mark.yuze@pytest.mark.musendeftest_01():print("用例一")deftest_02():print("用例二")@pytest.mark.musendeftest_03():print("用例三")@pytest.mark.musendeftest_04():print("用例四")@pytest.mark.yuzedeftest_05():print("用例五")@pytest.mark.yuzedeftest_06():print("用例六")

上面 Demo 中有 6 条测试用例,分别通过 pytest.mark.yuze 和 pytest.mark.musen 进行标记了,接下来我们一起来看看如何通过标记选择用例执行。

3.1、通过单个标记筛选

语法:pytest -m '标签名'

Demo: pytest -m musen

执行结果如下:

==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/3deselected/3selectedtest_mode.py...[100%]==========================3passed,3deselectedin0.29s==========================

可以看到执行结果执行了 3 条用例,3 条未选中。

3.2、同时选中多个标记

语法:pytest -m "标记 1 or 标记 2"

命令:pytest -m "musen ro yuze"

执行通过 musen 或者 yuze 标记的的用例。执行结果如下:

==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/1deselected/5selectedtest_mode.py.....[100%]==========================5passed,1deselectedin0.29s==========================

从上述结果可以看到,只要加了 musen 或 yuze 这两个标记中的任意一个

语法:pytest -m "标记 1 and 标记 2"

命令:pytest -m "musen and yuze"

执行通过 musen 和 yuze 这两个标记同时标记的用例。执行结果如下

==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/5deselected/1selectedtest_mode.py.[100%]==========================1passed,5deselectedin0.29s===================

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

推荐阅读更多精彩内容