pytest重复执行 Pytest失败重跑机制pytest-rerunfailu

pytest重复执行 Pytest失败重跑机制pytest-rerunfailu

目录
  • 一、核心命令解析
    • 安装命令
    • 基础重跑命令
    • 延迟重跑命令
  • 二、为什么需要失败重跑?
    • 偶发性失败的常见缘故
    • 重跑机制的价格
  • 三、实战演示:重跑机制应用
    • 测试场景:支付结局查询
    • 执行结局对比
  • 四、进阶使用技巧
    • 1. 标记特定测试重跑
    • 2. 条件重跑(仅重试特定异常)
    • 3. 重跑结局报告增强
  • 五、重跑机制原理剖析
    • 执行流程
    • 注意事项
  • 六、最佳操作指南
    • 1. 重试策略配置建议
    • 2. 避免滥用重跑
    • 3. 结合其他机制
  • 七、企业级应用案例
    • 案例1:电商支付体系测试
    • 案例2:微服务集成测试
    • 案例3:移动App自动化测试
  • 八、常见难题解决方案
    • Q1:重跑导致测试时刻过长
    • Q2:怎样区分重跑日志?
    • Q3:重跑后怎样清理情形?
  • 九、重跑机制核心价格
    • 核心优势矩阵
    • 最佳操作口诀

在自动化测试中,偶发性失败是常见痛点。这篇文章小编将深入解析怎样通过pytest-rerunfailures插件优雅解决偶发故障难题。

一、核心命令解析

安装命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest-rerunfailures

  • -i:指定镜像源(国内加速)
  • pypi.tuna.tsinghua.edu.cn:清华大学PyPI镜像
  • pytest-rerunfailures:失败重跑插件

基础重跑命令

pytest -s testcases/test_rerun.py –reruns 5

  • --reruns 5:最大重试次数(失败后自动重跑最多5次)

延迟重跑命令

pytest -s testcases/test_rerun.py –reruns 5 –reruns-delay 1

  • --reruns-delay 1:每次重试间隔1秒

二、为什么需要失败重跑?

偶发性失败的常见缘故

失败类型 占比 典型场景
环境波动 40% 网络抖动、资源竞争
时序难题 30% 异步操作未完成
第三方依赖 20% API限流、服务不稳定
随机影响 10% 随机数据冲突

重跑机制的价格

graph LR A[首次失败] –> B是否可重跑?} B –>|是| C[自动重试] B –>|否| D[标记失败] C –> E重试成功?} E –>|是| F[报告成功] E –>|否| D

三、实战演示:重跑机制应用

测试场景:支付结局查询

test_payment.pyimport pytestimport randomdef test_payment_status(): “”” 模拟第三方支付接口的不稳定响应 “”” result = random.choice([True, False]) 50%失败率 assert result, “支付情形查询失败”

执行结局对比

无重跑机制

$ pytest test_payment.py============================1 failed in 0.12s

启用重跑机制

$ pytest test_payment.py –reruns 3 –reruns-delay 0.5============================rerun test_payment.py::test_payment_statusRerun 1: 失败Rerun 2: 成功1 passed, 2 rerun in 0.87s

四、进阶使用技巧

1. 标记特定测试重跑

@pytest.mark.flaky(reruns=3, reruns_delay=1)def test_api_connection(): response = requests.get(“https://unstable-api.com”) assert response.status_code == 200

优势:针对不稳定API单独设置重试策略

2. 条件重跑(仅重试特定异常)

@pytest.mark.flaky( reruns=3, condition=TypeError 仅当捕获TypeError时重试)def test_data_processing(): 可能因数据类型错误失败 process_data(get_external_data())

3. 重跑结局报告增强

pytest –reruns 2 –reruns-delay 1 –html=report.html

报告效果

测试用例 情形 重试次数
test_login PASSED 0
test_payment PASSED 2 (首次失败)

五、重跑机制原理剖析

执行流程

1. pytest收集测试用例
2. 执行原始测试
&8211; 成功 → 记录结局
&8211; 失败 → 触发重试机制
3. 重试执行(最多N次)
&8211; 任意成功 → 标记为passed
&8211; 全部失败 → 标记为failed
4. 生成最终报告

注意事项

  1. setup/teardown:每次重试都会重新执行
  2. 测试情形:只有最终情形计入报告
  3. 耗时计算:包含所有重试时刻总和

六、最佳操作指南

1. 重试策略配置建议

场景类型 reruns reruns-delay 说明
网络依赖 3-5 1-3s 等待网络恢复
异步操作 2-3 0.5-1s 给操作完成时刻
高负载服务 5+ 随机延迟 避免雪崩效应
数据库竞争 3 0.3s 减少锁冲突

2. 避免滥用重跑

不应使用重跑的场景

  • 逻辑性错误(永远失败)
  • 环境配置错误
  • 数据一致性难题
  • 性能不达标场景

3. 结合其他机制

重跑+分布式执行pytest -n auto –reruns 3 重跑+失败截图pytest –reruns 2 –screenshot-on-failure 重跑+性能监控pytest –reruns 1 –perf-monitor

七、企业级应用案例

案例1:电商支付体系测试

挑战:支付网关接口偶发超时(发生率约5%)
解决方案

pytest tests/payment/ –reruns 3 –reruns-delay 2

效果

  • 测试稳定性从95%提升至99.9%
  • 误报缺陷减少90%
  • 团队信赖度显著提升

案例2:微服务集成测试

难题:服务启动顺序导致偶发失败
重跑策略

@pytest.mark.flaky( reruns=2, reruns_delay=5, 等待服务注册完成 condition=ConnectionError)def test_service_integration(): 测试服务间调用

案例3:移动App自动化测试

独特需求

  • 首次安装权限弹窗干扰
  • 应用启动时刻波动
    定制方案

pytest mobile_tests/ –reruns 1 –reruns-delay 10

首次失败后等待10秒重试,避开初始化阶段

八、常见难题解决方案

Q1:重跑导致测试时刻过长

解决方案

只对标记为flaky的测试重跑pytest -m flaky –reruns 3 使用智能延迟(指数退避)@pytest.mark.flaky(reruns=3, reruns_delay=”exponential”)

Q2:怎样区分重跑日志?

conftest.pydef pytest_runtest_logstart(nodeid, location): if hasattr(request.node, “execution_count”): count = request.node.execution_count print(f”n[重试 count}] nodeid}”)

Q3:重跑后怎样清理情形?

@pytest.fixture(autouse=True)def cleanup_after_retry(request): yield if hasattr(request.node, “execution_count”): 每次重试后清理 reset_test_state()

九、重跑机制核心价格

核心优势矩阵

维度 传统模式 重跑机制
稳定性 偶发失败导致误报 过滤偶发故障
可信度 报告可信度低 诚实反映质量
维护成本 大量时刻排查伪缺陷 聚焦诚实难题
执行效率 手动重跑浪费时刻 自动恢复执行

最佳操作口诀

偶发失败不用慌,rerun插件来帮忙–reruns 设次数,–delay 定间隔标记注解更精准,避免滥用记心上结合报告分布式,测试稳定又高效

通过合理应用pytest-rerunfailures,无论兄弟们可以将自动化测试的稳定性提升到新的高度。记住:重跑是应对偶发故障的利器,但不是代码质量难题的遮羞布。当测试频繁重试时,仍需深入分析根本缘故!

到此这篇关于Pytest失败重跑机制pytest-rerunfailures的实现的文章就介绍到这了,更多相关Pytest失败重跑内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

无论兄弟们可能感兴趣的文章:

  • python优化测试稳定性的失败重试工具pytest-rerunfailures详解
  • pytest?用例执行失败后其他不再执行
版权声明

返回顶部