此功能需要 Microsoft.Testing.Extensions.Retry NuGet 包。
小窍门
使用 Microsoft.Testing.Platform.MSBuild (由 MSTest、NUnit 和 xUnit 运行程序以可传递方式包含),安装其 NuGet 包时会自动注册此扩展 ,无需更改代码。 仅当通过设置 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>禁用自动生成的入口点时,才需要以下部分中的手动注册。
手动注册
var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddRetryProvider();
重试
.NET测试复原能力和暂时性故障处理扩展。
此扩展用于集成测试,其中测试严重依赖于环境的状态,并且可能会遇到暂时性故障。
注释
该包附带严格的 Microsoft.Testing.Platform 工具许可证。 https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.0.0/License 提供完整的许可证。
选项
| Option | Description |
|---|---|
--retry-failed-tests |
重新运行任何失败的测试,直到通过或达到最大尝试次数为止。 激活扩展功能所必需的。 |
--retry-failed-tests-max-percentage |
当失败的测试用例百分比超过指定的阈值时,避免重新运行测试。 不能与 --retry-failed-tests-max-tests 结合使用。 需要 --retry-failed-tests。 |
--retry-failed-tests-max-tests |
当失败的测试用例数量超过指定的限制时,避免重新运行测试。 不能与 --retry-failed-tests-max-percentage 结合使用。 需要 --retry-failed-tests。 |
--retry-failed-tests-delay |
在重试之间添加延迟。 延迟表示为时间值,例如200、500ms、1s、2.5m或1h1d。 默认单位为毫秒。 需要 --retry-failed-tests。 从版本 2.3.0 开始,MTP 中可用。 |
两个阈值选项(--retry-failed-tests-max-percentage 和 --retry-failed-tests-max-tests)都要求一并设置 --retry-failed-tests。
对于框架作者,此扩展需要稳定的测试节点 UID 和正确的 请求筛选器处理。 重试会启动新的测试过程,并通过 --filter-uid 选择失败的测试。 如果框架忽略 TestNodeUidListFilter,它可以重新运行未选择的测试,而不是只重新运行失败的测试。
从 MTP 2.4.0 开始,重试摘要报告单独的 flaky 和 retried 计数,并在 Flaky 测试下列出重试后恢复的测试名称。 为了避免产生误导性的总计,对于首次尝试之后经过筛选的重试,MTP 不会打印整个套件的摘要。 使用终端报告器的 --show-flaky-tests 选项可显示或隐藏不稳定详情。
每次重试尝试都会在 Retries 目录下写入其报表项目。 对于 JUnit,顶级报表仅表示最终筛选后的重试尝试,而不是原始的完整套件;当 CI 需要完整覆盖时,从 Retries 收集先前的尝试报告。 此布局适用于 --retry-failed-tests. MSTest 的进程内 [Retry] 则会将已被替代的尝试合并为每个测试的一个最终 JUnit 或 TRX 结果。
例子
可以将失败的测试最多重试 3 次。
dotnet run --project Contoso.MyTests -- --retry-failed-tests 3
重试失败的测试最多 2 次,但如果超过 50% 的测试失败,请停止重试:
dotnet run --project Contoso.MyTests -- --retry-failed-tests 2 --retry-failed-tests-max-percentage 50
重试失败的测试最多 3 次,但如果超过 10 个测试失败,请停止重试:
dotnet run --project Contoso.MyTests -- --retry-failed-tests 3 --retry-failed-tests-max-tests 10
局限性
- 浏览器平台上不受支持。
- 热重载模式下不被支持。