12. Pytest常用插件: pytest-rerunfailures失败用例重跑
一、前言
测试环境不稳定偶发接口超时(和服务无关,纯粹是环境问题),然后执行接口case也因此偶发失败。比如同一个接口case跑五次,其中有两次失败,另外三次都是成功的,这种偶发性的环境问题就需要我们手动重跑(还不一定能够通过)。有没有一个比较好的机制,保证case能够尽最大努力通过测试呢?
这里我们介绍pytest的一个失败重跑插件:pytest-rerunfailures。
二、学习目标
1.pytest-rerunfailures
安装
2.pytest-rerunfailures
应用
三、知识点
1.【pytest-rerunfailures
安装】
插件安装:
pip install pytest-rerunfailures
2.【pytest-rerunfailures
应用】
使用方式有两种:
-
命令行参数
-
语法:
pytest --reruns 3 --reruns-delay 1 test_demo.py #3是重试次数,1是每次间隔1秒 pytest --reruns 3 --only-rerun AssertionError --only-rerun ValueError test_demo.py #也可以指定异常类型重跑,其中多个--only-rerun之间是或的关系
-
代码示例:
#测试用例文件test_XXX.py class TestCase(): def test_01(self): print("---用例1执行---") assert False
-
运行效果:
test_demo.py:8: AssertionError ----------------------------------------------- Captured stdout call ---------------------------------------------------- ---用例1执行--- ----------------------------------------------- Captured stdout call ---------------------------------------------------- ---用例1执行--- ------------------------------------------------Captured stdout call ---------------------------------------------------- ---用例1执行--- -----------------------------------------------Captured stdout call ----------------------------------------------------- ---用例1执行--- ================================ short test summary info ==================================== FAILED test_demo.py::TestCase::test_01 - assert False ==================================== 1 failed, 3 rerun in 3.08s ==========================================
用例失败后又重试运行了三次。
-
-
装饰器方式
-
语法:
@pytest.mark.flaky(reruns=3, reruns_delay=1)#3是重试次数,1是每次间隔1秒
-
代码示例:
import pytest class TestCase(): @pytest.mark.flaky(reruns=3, reruns_delay=1) def test_01(self): print("---用例1执行---") assert False
-
运行效果:
test_demo.py::TestCase::test_01 RERUN [100%] test_demo.py::TestCase::test_01 RERUN [100%] test_demo.py::TestCase::test_01 RERUN [100%] test_demo.py::TestCase::test_01 FAILED [100%]---用例1执行--- ---用例1执行--- ---用例1执行--- ---用例1执行--- FAILED test_demo.py::TestCase::test_01 - assert False ========================= 1 failed, 3 rerun in 3.06s ==========================
用例失败后又重试运行了三次。
-
-
注意:
不可以与类,模块还有包级别的fixture装饰器一起使用: @pytest.fixture()
该插件与pytest-xdist的 --looponfail 标志不兼容
该插件在使用pdb调试时候会有不兼容性
最后总结,这个插件虽然还用,但是坑还是不少,建议主要使用失败重试次数和重试间隔的功能即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具