Pytest 失败重运行
需安装第三方插件:pytest-rerun、pytest-rerunfailures
失败重试和失败重运行的区别
失败重试:【--reruns=1】,用例执行失败后,会立即开始重试一次此用例,再执行下一条用例
失败重运行:【--if】 ,用例集或用例执行完成之后,再次pytest.main(),会收集失败的用例,再次运行;如果没有失败的用例,会执行全部
一个run文件,可以同时写多条pytest.main(),执行pytest的命令
if __name__=="__main__":
pytest.main(['-s','test_firstFile.py'])
-- 第一次运行,如果有失败的用例/第一次没有失败的用例
pytest.main(['-s','--lf','test_firstFile.py']) – 收集到第一次失败的用例,进行执行/则运行全部
需注意,如果用例数较多,第一次运行全部成功的情况,第二个pytest.main(),是会收集所有的用例再执行一遍。
建议使用失败重试次数(--reruns=1),失败一次后,立刻执行一次,也可减少用例的失败率
失败重试方式
1、可在命令行 –reruns=1 reruns_delay=2 失败后重运行1次,延时2s
2、使用装饰器进行失败重运行
@pytest.mark.flaky(reruns=1, reruns_delay=2)
命令行参数和装饰器同时存在
说明:如果用例装饰器方式设置了重新运行次数,则在命令行添加–reruns对这些用例不会生效;装饰器的优先级>命令行
- 这个插件不可以和 class, module, package 级别的fixture装饰器一起使用,不能与@pyest.mark.usefixtures()一起使用
- 这个插件与 pytest-xdist 的 --looponfail 标志不兼容
- 这个插件与核心 --pdb 标志不兼容
总结
pytest-rerunfailures插件可以通过命令行参数 --reruns 2 --reruns-delay 5 进行使用,这个对于所有用例生效
pytest-rerunfailures插件使用装饰器装饰在用例上面,只对装饰的用例有效
当时同时使用装饰器和命令行参数时,装饰器参数优先级高
注意插件的兼容性
原文链接:https://blog.csdn.net/u010454117/article/details/118584670