如何在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)触发重试,要覆盖所有异常场景,可自定义扩展特性:
- 创建自定义重试特性,继承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; } }
- 将测试类或方法上的
[Retry(2)]替换为[RetryAll(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
相关产品推荐
相关产品推荐

