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

NUnit如何限制全局测试重试次数并灵活终止测试运行?

NUnit自定义解决方案:全局重试与阈值终止

1. 为所有测试设置全局最大重试次数

NUnit没有原生的全局重试配置,你可以通过自定义ITestAction实现全局重试逻辑:

实现全局重试属性

using NUnit.Framework;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class GlobalRetryAttribute : Attribute, ITestAction
{
    // 可配置的最大重试次数,默认2次
    public int MaxRetries { get; set; } = 2;

    public void BeforeTest(ITest test) { }

    public void AfterTest(ITest test)
    {
        // 仅针对失败的测试用例,且未达到重试上限时触发重试
        if (test.Result.Status == TestStatus.Failed && test.TestCase.RetryCount < MaxRetries)
        {
            test.RunState = RunState.Runnable;
        }
    }

    public ActionTargets Targets => ActionTargets.Test;
}

全局启用重试

在项目的AssemblyInfo.cs中添加以下代码,即可为所有测试应用全局重试规则:

[assembly: GlobalRetry(MaxRetries = 2)]

2. 达到失败阈值时终止测试运行

要实现“失败测试超过4个时终止”的逻辑,同样通过自定义ITestAction监听测试结果并中断执行:

实现失败阈值终止属性

using NUnit.Framework;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class StopOnFailedThresholdAttribute : Attribute, ITestAction
{
    private int _failedTestCount = 0;
    // 可配置的失败阈值,默认4个
    public int FailureThreshold { get; set; } = 4;

    public void BeforeTest(ITest test)
    {
        // 若已达到阈值,标记后续测试为忽略并终止执行
        if (_failedTestCount >= FailureThreshold)
        {
            test.RunState = RunState.Ignored;
            TestExecutionContext.Current.Abort();
        }
    }

    public void AfterTest(ITest test)
    {
        // 统计失败测试数量,达到阈值则立即终止
        if (test.Result.Status == TestStatus.Failed)
        {
            _failedTestCount++;
            if (_failedTestCount >= FailureThreshold)
            {
                TestExecutionContext.Current.Abort();
            }
        }
    }

    public ActionTargets Targets => ActionTargets.Test;
}

启用阈值终止规则

同样在AssemblyInfo.cs中添加配置:

[assembly: StopOnFailedThreshold(FailureThreshold = 4)]

注意事项

  • 两个自定义属性可以同时在Assembly级别注册,互不冲突
  • 重试次数统计的是测试用例的重试次数,而非总执行次数(比如重试2次意味着最多执行3次:1次初始+2次重试)
  • 终止操作会直接中断整个测试运行,未执行的测试将不再运行

内容的提问来源于stack exchange,提问作者A. H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:19