pytest的一些实用插件实践

前言

关于pytest就不多做介绍了,目前很多公司都在用的框架,选用该框架的理由很多啦,比如:

  • 容易上手,入门简单,文档丰富,支持的第三方插件很多,文档中示例也很详细
  • 支持运行node/unittest编写的测试脚本
  • 支持失败重跑
  • 支持参数化
  • 执行指定执行某些case
    等等

这次主要记录一些比较实用的插件实践操作。
关于pytest的第三方插件,截止写下这些文字时,一共579个,详情可见plugins

plugins.png

实用的插件介绍

1.pytest安装

pip install -U pytest

个人比较建议安装3.8.0版本。

2.多重校验 pytest-assume

简单的校验assert,虽然可以写多个assert

    def test_add1(self):
        assert add(2,3)==5
        assert add(1,3)==3
        assert add(2,5)==7

由于第二个断言失败,那么下面的断言就不会执行。
所以如果需要多个断言,都执行就需要第三方插件 pytest-assume
安装命令:

pip install pytest-assume

示例:

    def test_add2(self):
        pytest.assume(add(1,2)==3)
        pytest.assume(add(1,4)==3)
        pytest.assume(add(2,2)==4)

这边即使第二个断言失败了,第三个断言还是会继续执行。

3.设定执行顺序 pytest-ordering

对于一些上下文依赖的,有时候可能需要设定一些特定执行顺序,pytest的ordering插件,就很好的解决了这个问题
安装命令

pip  install  pytest-ordering

示例脚本如下:

def test_order1():
    print ("first test")
    assert True

def test_order2():
    print ("second test")
    assert True

没有加上ordering,执行顺序是 test_order1----test_order2,如图:


before.png

加上顺序之后

@pytest.mark.run(order=2)
def test_order1():
    print ("first test")
    assert True
@pytest.mark.run(order=1)
def test_order2():
    print ("second test")
    assert True

结果如下:


after.png

对比可以看出,执行顺序发生了变化

4.失败重跑 pytest-rerunfailures

失败用例重跑,个人觉得这个是非常实用的插件。
举个例子:
在做UI自动化,如selenuim或者appium时,遇到某些元素未能及时显示,导致点击失败,如果加上重跑,那么将有效提高报告的准确性。
安装命令:

pip install pytest-rerunfailures 

示例脚本

class TestRerun():

    @pytest.mark.run(order=2)
    @pytest.mark.flaky(reruns=5)
    def test_random(self):
        print(1)
        pytest.assume((random.randint(0,4)+3)==5)

    @pytest.mark.run(order=3)
    def test_random2(self):
        '''
        不加mark 命令行中
        pytest -sq demo_rerun.py --reruns 5
        :return:
        '''
        print(2)
        pytest.assume((random.randint(0,4)+3)==5)

    @pytest.mark.run(order=1)
    @pytest.mark.flaky(reruns=6, reruns_delay=2)
    def test_example(self):
        print(3)
        assert random.choice([True, False])

详细的可以参考Github
执行命令:

pytest -sq demo_rerun.py --reruns 5
pytest -sq demo_rerun.py --reruns 5  --reruns-delay 1

二者的区别是,下面在每次重跑之前会等待 1 s
同时也可以在脚本中指定定义重跑的次数,这个时候在运行的时候,就无需加上 --reruns 这个参数

@pytest.mark.flaky(reruns=6, reruns_delay=2)
    def test_example(self):
        print(3)
        assert random.choice([True, False])
result.png

5.显示进度条 pytest-sugar

个人觉得功能上这个插件,并没有什么作用,可能更大的作用是心理上的,在调试的时候,可以显示执行的进度。
安装命令

pip install pytest-sugar

运行的时候无需其他的参数,会自动显示整体的进度


sugar.png

5.覆盖率 pytest-cov

单元测试过程中,有一个很重要的指标:行覆盖率
pytest-cov 这个插件就很好显示覆盖率
安装命令:

pip install pytest-cov

执行命令

pytest --cov=../../xpinyin  demo_cov.py

其中--cov 后面带上需要检查覆盖率的路径
结果为:


cov.png

以上所有实践demo可以参考github

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