重试

此功能需要 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 在重试之间添加延迟。 延迟表示为时间值,例如200500ms1s2.5m1h1d。 默认单位为毫秒。 需要 --retry-failed-tests。 从版本 2.3.0 开始,MTP 中可用。

两个阈值选项(--retry-failed-tests-max-percentage--retry-failed-tests-max-tests)都要求一并设置 --retry-failed-tests

从 MTP 2.4.0 开始,重试摘要报告单独 flakyretried 计数,并列出 Flaky 测试下恢复的测试名称。 为了避免产生误导性的总计,MTP 不会在第一次尝试后打印经过筛选的重试尝试的完整套件摘要。 使用终端记者 --show-flaky-tests 的选项可显示或隐藏模糊的详细信息。

每次重试尝试都会在其目录下 Retries 写入其报表项目。 对于 JUnit,顶级报表仅表示最终筛选的重试尝试,而不是原始完整套件;从 Retries CI 需要完整覆盖时收集先前的尝试报告。 此布局适用于 --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

局限性

  • 浏览器平台上不受支持。
  • 热重载模式下不被支持。