pytest-rerunfailures失败重跑用例
一、安装插件
#官方
pip install pytest-rerunfailures
#国内源
pip install pytest-rerunfailures -i https://pypi.tuna.tsinghua.edu.cn/simple
二、命令行方式运行
-
要重新运行所有失败的用例,添加
--reruns num
参数,其中num
表示最大运行次数# 失败重运行最大次数为5次 pytest --reruns 5
-
要在两次重运行之间增加延时,则可以使用
--reruns-delay
参数,指定下一次重新运行之前需要等待的秒数# 失败重运行最大次数为3次,每次重跑时等待10秒 pytest --reruns 3 --reruns-delay 10
-
重跑失败用例时,还可以与某些表达式进行匹配
# 下面的代码只会重新运行与 AssertionError断言错误相匹配的错误用例 pytest --reruns 5 --only-rerun AssertionError # 多次传递标志会累积参数,因此下面的代码会重新运行匹配 AssertionError 或 ValueError 的错误用例 pytest --reruns 5 --only-rerun AssertionError --only-rerun ValueError
-
重新运行除匹配某些表达式之外的所有失败用例
# 下面代码会重新运行除开 AssertionError断言错误相匹配的错误用例 pytest --reruns 5 --rerun-except AssertionError # 多次传递标志会累积参数,下面代码会重新运行除开 AssertionError或OSError断言错误相匹配的错误用例 pytest --reruns 5 --rerun-except AssertionError --rerun-except OSError
三、装饰器方式运行
-
若要将单个测试标记为失败重跑,请添加flaky装饰器,其中包含您希望测试用例重跑的最大次数
@pytest.mark.flaky(reruns=5) def test_example(): import random assert random.choice([True, False])
-
还可以指定重新运行的延迟时间,比如:
@pytest.mark.flaky(reruns=5, reruns_delay=2)
表示重运行最大次数为5次,下一次开始前等待2s后再重跑@pytest.mark.flaky(reruns=3, reruns_delay=2) def test_01(): import random assert random.choice([True, False, False, False])
-
还可以在重跑测试用例时,指定可选条件,比如制定运行的平台
@pytest.mark.flaky(reruns=5, condition=sys.platform.startswith("win32")) def test_example(): import random assert random.choice([True, False])