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

NUnit 3.13.2版本Retry属性测试失败后不执行重试问题求助

NUnit测试失败未触发自动重试问题排查方案

1. 优先确认特性适配问题

  • NUnit 3.x原生RetryAttribute仅对测试方法执行过程中产生的失败生效,以下场景不会触发重试:
    • 测试用例初始化阶段报错:比如你代码中TestCaseSource配置的Excel路径TestData\SampleTests2.xlsx未正确转义、文件不存在、Excel数据读取失败,这类发生在测试方法执行前的错误,不属于运行时失败,不会触发重试
    • 测试方法被全局异常拦截器/自定义ActionAttribute捕获了异常,没有将异常抛出给NUnit测试框架,导致框架判定为没有失败
  • 额外注意:Retry(2)的参数为「最大运行总次数」,即配置为2时仅会在首次失败后重试1次,并非重试2次

2. 断言逻辑适配排查

你当前遇到的Expected: No Exception to be thrown But was ERROR报错是Assert.That(..., Throws.Nothing)抛出的断言失败,该写法会捕获lambda内部抛出的所有异常,并转换为NUnit的AssertionException抛出,原生RetryAttribute默认是支持断言失败重试的,但如果你的项目内有自定义的断言扩展、或者异常过滤逻辑排除了AssertionException,就会导致重试不生效。可以先替换成直接运行方法不加断言的写法,验证重试是否能触发:

public void Test2_URL( string url, string application) {
    // 去掉断言包装,直接调用方法,如果方法抛异常会直接被NUnit捕获
    UtilitiesPage.URL(driver, appUrl);
}

3. 特性搭配冲突排查

  • [TestCaseSource]本身已经标记方法为参数化测试,无需额外添加[Test]属性,两者同时存在部分版本的运行器会判定为特性冲突,导致Retry不生效,可以删除冗余的[Test]属性后重试
  • 确认你的测试运行器兼容NUnit 3.13.2:比如升级NUnit3TestAdapter到最新稳定版,避免运行器不识别Retry特性的问题

4. 兜底解决方案:自定义重试特性

如果原生Retry特性不符合你的需求,可以自己实现支持断言失败、参数化测试的重试Attribute,示例核心逻辑如下:

using NUnit.Framework;
using NUnit.Framework.Interfaces;
using System;

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class CustomRetryAttribute : Attribute, ITestAction
{
    private readonly int _retryCount;
    public CustomRetryAttribute(int retryCount) => _retryCount = retryCount;

    public ActionTargets Targets => ActionTargets.Test;

    public void BeforeTest(ITest test) { }

    public void AfterTest(ITest test)
    {
        if (test.Result.ResultState == ResultState.Failure && _retryCount > 0)
        {
            _retryCount--;
            TestExecutionContext.CurrentContext.CurrentResult = test.RunTest(TestExecutionContext.CurrentContext).Result;
        }
    }
}

内容的提问来源于stack exchange,提问作者Gnaneswar Reddy Sodini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:05