精选文章 > IT知识库 > Pytest的测试用例相关问题总结
Pytest的测试用例相关问题总结
失败重跑 Pytest-rerunfailures
要求:python 3.5+、pytest 5.0+
安装:pip install pytest-rerunfailures
文档:https://pypi.org/project/pytest-rerunfailures/
使用方法:在命令行或 pytest.ini 配置文件 addopts 中添加选项:--reruns n(重新运行n次数),--reruns-delay m(等待m秒开始下次重新运行):
(1)命令行:pytest --reruns 3 --reruns-delay 5;
(2)pytest.ini 文件:addopts = --reruns 3 --reruns-delay 5
若要指定单个测试用例在失败时重新运行,需要在测试用例添加 flaky 装饰器,如:@pytest.mark.flaky(reruns=n, reruns_delay=m)。
@pytest.mark.flaky(reruns=2, reruns_delay=3)
def test_01():
assert 0
用例执行顺序 Pytest-ordering
默认情况下,Pytest 根据测试方法从上到下执行用例,可以通过第三方插件 Pytest-ordering 来改变测试顺序。
安装:pip install pytest-ordering
文档:https://pypi.org/project/pytest-ordering/
使用方法:在需要调整执行顺序的测试函数上标记@pytest.mark.run(order=x)order 值越小,优先级越高;执行顺序按照如下排序:0 > 正数 > 未使用run修饰的 > 负数。
importpytest @pytest.mark.run(order=3)
deftest_01():
print("test_01")
assert 1
@pytest.mark.run(order=2)
deftest_02():
print("test_02")
assert 1
@pytest.mark.run(order=-1)
deftest_03():
print("test_03")
assert1
# 以上用例将按照 test_02 -> test_01 -> test_03 顺序执行
重复执行 Pytest-repeat
安装:pip install pytest-repeat
使用方法:在命令行或 pytest.ini 配置文件 addopts 中添加选项:
--count n(重复运行n次数)
--repeat-scope 可以覆盖默认的测试用例执行顺序,类似 fixture 的scope参数
function:默认,范围针对每个用例重复执行,再执行下一个用例
class:以class为用例集合单位,重复执行class里面的用例,再执行下一个
module:以模块为单位,重复执行模块里面的用例,再执行下一个
session:重复整个测试会话,即所有测试用例的执行一次,然后再执行第二次:
(1)命令行:pytest --count 5
(2)pytest.ini 文件:addopts = --count 5
通常与 pytest 的 -x 搭配使用,重复测试直到失败,常用于验证一些偶现的问题,命令行运行:pytest --count=10 -x test_demo.py:
# test_demo.py 文件
importpytest
@pytest.mark.repeat(10)
# 将指定测试用例标记为执行重复多次
deftest_01():
assert 1
多重断言 Pytest-assume
assert断言可以写多个断言,但一个失败,后面的断言将不再执行,可以使用 pytest-assume 来进行断言,即使断言失败,后面的断言还是会继续执行,比 assert 更高效。
安装:pip install pytest-assume。
importpytest
def test_01():
pytest.assume(1==1)
pytest.assume(2==2)
pytest.assume(1==0)
pytest.assume(3==3)
print("测试完成")
End