pytest-rerunfailures是一个通过重跑机制来消除不稳定失败的pytest插件
安装插件: pip install pytest-rerunfailures
使用方式有两种:
命令行参数: --reruns n(重新运行次数)–reruns-delay m(等待运行秒数)
装饰器方式:@pytest.mark.flaky(reruns=5, reruns_delay=2)
rerun所有失败的用例
1、使用--reruns命令行选项,并指定要运行测试的最大次数:pytest --reruns 5 -s
2、添加rerun的delay,使用--reruns-delay命令行选项,指定下次测试重新开始开始前等待的秒数:pytest --reruns 5 --reruns-delay 10 -s
3、运行失败的fixture或setup_class也将重新执行
4、rerun指定的测试用例,要将单个测试用例添加flaky装饰器@pytest.mark.flaky(reruns=5),并在测试失败时rerun,需要指定最大运行的次数
重运行次数之间可以设置时间间隔(单位:秒) --reruns 2 --reruns-delay 5 重运行2次,每次间隔5秒
Notes:
如果指定了用例的重复运行次数和delay,在命令行添加--reruns和--reruns-delay对这些用例时不会生效的
不可以和fixture装饰器一起使用:@pytest.fixture()
该插件与pytest-xdist的--looponfail标记不兼容
该插件与核心--pdb标记不兼容
运行失败的fixture或setup_class也将重新执行
报告
allure报告看不出有rerun,可以用html报告查看有多少条rerun的用例
pytest.main(["-s","-v",
"--html=report.html",
# "-m","demo or smoke",
"--alluredir=allure_dir",
"--reruns","2","--reruns-delay","5"])
兼容性
不可以与类,模块还有包级别的fixture装饰器一起使用: @pytest.fixture()
该插件与pytest-xdist的 --looponfail 标志不兼容
该插件在使用pdb调试时候会有不兼容性
最后总结,这个插件虽然还用,但是坑还是不少,建议主要使用失败重试次数和重试间隔的功能即可