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

如何在TeamCity中用NUnit框架重跑失败测试用例及相关问题

解决方案:TeamCity重跑NUnit失败用例 + 扩展[Retry]特性覆盖所有失败场景

一、TeamCity中重跑NUnit失败测试用例

  • 在TeamCity的构建配置里,打开Tests选项卡,启用「Retry failed tests」功能,设置需要的重跑次数(比如2次)
  • 优先使用TeamCity自带的NUnit Runner作为构建步骤,而非自定义命令行,这样TeamCity能直接解析NUnit测试结果,精准定位失败用例并触发重跑
  • 若必须用命令行执行NUnit,需确保生成NUnit格式的测试结果XML,同时在构建步骤中配置「Publish test results」指定XML路径,让TeamCity能识别失败用例

二、让NUnit的[Retry]特性对所有失败生效

默认NUnit的[Retry(2)]仅对断言失败(AssertionException)触发重试,要覆盖所有异常场景,可自定义扩展特性:

  1. 创建自定义重试特性,继承NUnit的RetryAttribute并重写ShouldRetry方法:
using NUnit.Framework;
using NUnit.Framework.Interfaces;

public class RetryAllAttribute : RetryAttribute
{
    public RetryAllAttribute(int retryCount) : base(retryCount) { }

    public override bool ShouldRetry(ITestResult result)
    {
        // 所有非成功的测试结果都触发重试(含各类异常、超时等)
        return result.ResultState != ResultState.Success;
    }
}
  1. 将测试类或方法上的[Retry(2)]替换为[RetryAll(2)],即可让空指针、服务调用异常、超时等所有类型的失败都触发重试
  2. 若需精细控制重试范围(仅重试特定异常),可在ShouldRetry中检查异常类型:
public override bool ShouldRetry(ITestResult result)
{
    if (result.ResultState == ResultState.Success) return false;
    // 仅对指定类型异常重试
    return result.Exception is NullReferenceException || result.Exception is HttpRequestException;
}

内容的提问来源于stack exchange,提问作者Surya Mahar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:29:56