TeamCity中基于xUnit框架的C#失败测试用例自动重跑方案咨询
xUnit + TeamCity 环境下失败测试用例自动重跑实现方案
xUnit 侧代码适配
xUnit 原生未提供控制台参数直接配置全局重跑规则,可通过以下两种方式实现:
方案1:使用第三方NuGet包快速实现
- 给测试项目安装
XunitRetryNuGet依赖 - 对存在偶发失败的Selenium UI测试方法,添加
[Retry(重跑次数)]特性标记,例如[Retry(2)]表示用例失败后最多自动重跑2次,任意一次执行成功即判定用例通过 - 如需全局配置所有测试的重跑规则,可在测试项目根目录新建
xunit.runner.json文件,添加如下配置:
{ "retryCount": 2, "retryOnFailures": true }
- 注意重跑前必须添加Selenium驱动状态清理逻辑,建议在测试类的
Dispose方法中实现页面缓存清理、驱动实例重置,避免上一次执行的残留状态影响重跑结果。
方案2:自定义测试执行器实现灵活规则
如果需要自定义重跑触发条件(例如仅针对网络异常、元素加载超时等特定异常重跑、配置重跑间隔),可通过扩展xUnit原生特性实现:
- 继承原生
FactAttribute,新增重跑次数、重跑间隔、匹配异常类型等自定义参数 - 实现
IXunitTestCase接口,重写RunAsync方法,捕获测试执行异常后,按配置规则循环执行用例 - 后续需要支持重跑的测试用例,改用自定义的Fact特性标记即可。
TeamCity 侧无侵入配置方案
如果不想修改测试代码,可直接通过TeamCity构建配置实现重跑:
- 进入对应构建配置的「构建步骤」设置页,找到执行测试的原步骤,开启「仅运行失败的测试」选项
- 新增1-2个和原测试步骤完全一致的后续步骤,设置步骤触发条件为「当前面的步骤失败时执行」,即可实现用例失败后自动重跑
- 如使用
dotnet test命令执行测试,可在重跑步骤的命令参数中添加--filter "FullyQualifiedName~%system.teamcity.testFailed.FullyQualifiedName%",仅重跑上一步失败的用例,避免全量执行浪费时间。
内容的提问来源于stack exchange,提问作者agleno
相关产品推荐
相关产品推荐

