pytest的一些实用插件实践
前言
关于pytest就不多做介绍了,目前很多公司都在用的框架,选用该框架的理由很多啦,比如:
- 容易上手,入门简单,文档丰富,支持的第三方插件很多,文档中示例也很详细
- 支持运行node/unittest编写的测试脚本
- 支持失败重跑
- 支持参数化
- 执行指定执行某些case
等等
这次主要记录一些比较实用的插件实践操作。
关于pytest的第三方插件,截止写下这些文字时,一共579个,详情可见plugins。
实用的插件介绍
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