You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试崩溃时如何立即重启?仅二次失败判定为真失败

实现单测失败立即重试一次的轻量方案

不用额外安装库,自己写个简单的装饰器就能搞定,既避免了每个测试用例里写冗余的try-except,又能实现失败立即重试、二次失败才判定真失败的需求。

基础版装饰器(通用所有失败场景)

写一个可复用的装饰器,给需要重试的测试用例打上标记即可:

import pytest

def retry_once_on_failure(func):
    def wrapper(*args, **kwargs):
        # 第一次执行测试
        try:
            return func(*args, **kwargs)
        except Exception as first_exc:
            # 第一次失败,立即重试
            try:
                return func(*args, **kwargs)
            except Exception:
                # 第二次失败,抛出第一次的异常(保留原始错误信息)
                raise first_exc
    return wrapper

# 使用示例
@retry_once_on_failure
def test_server_availability():
    # 你的测试逻辑:比如发起服务器请求
    response = your_server_request_method()
    assert response.status_code == 200

精准版装饰器(仅重试服务器不可用场景)

如果只想针对服务器不可用的特定异常(比如ConnectionError、TimeoutError)重试,避免无关失败(比如断言错误)被重复执行,可以优化装饰器:

def retry_once_on_server_unavailable(func):
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except (ConnectionError, TimeoutError) as first_exc:
            # 仅当服务器连接/超时失败时重试
            try:
                return func(*args, **kwargs)
            except (ConnectionError, TimeoutError):
                raise first_exc
        # 其他异常直接抛出,不触发重试
    return wrapper

方案优势

  • 无需额外安装依赖,代码轻量易维护
  • 装饰器可复用,不用在每个测试用例里写重复的try-except逻辑
  • 失败后立即重试,不会等待其他测试用例执行
  • 二次失败才判定真失败,符合你的需求

内容的提问来源于stack exchange,提问作者Fedor March

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:50:36