【译】 Microsoft.Testing.Platform 现已在 Azure DevOps 中得到全面支持
▲点击上方“DotNet NB”关注公众号回复“1”获取开发者路线图学习分享丨作者 / 郑 子 铭这是DotNet NB 公众号的第243篇原创文章原文 | Youssef Fahmy翻译 | 郑子铭今年早些时候我们宣布所有主流 .NET 测试框架现已支持 Microsoft.Testing.Platform。下一步合乎逻辑的做法是什么确保它能与您的 CI/CD 管道无缝协作。今天我们宣布 Microsoft.Testing.Platform 与 Azure DevOps 全面集成。Azure DevOps 的新增功能Azure DevOps 现在通过两项关键改进为 Microsoft.Testing.Platform 提供一流的支持使用熟悉的 DotNetCoreCLI 任务运行测试无需再使用其他变通方法。智能处理测试重试——发布来自重试尝试的多个 TRX 文件并进行适当的分组和退出代码。无论您是从 VSTest 迁移过来还是从零开始使用 Microsoft.Testing.Platform现在的体验都非常流畅直观。关于 Microsoft.Testing.Platform如果您是 Microsoft.Testing.Platform 的新用户以下是一些可以帮助您快速上手的实用资源《.NET 测试》概述了 .NET 中使用的测试工具。特别是它阐明了测试平台和测试框架之间的区别。使用“dotnet test”进行测试解释了“dotnet test”命令可以运行的不同模式。Microsoft.Testing.Platform 概述介绍了 Microsoft.Testing.Platform 是什么以及如何使用它运行测试。使用新的 dotnet test 增强您的 CLI 测试工作流程该测试显示了 .NET 10 SDK 中添加的对 Microsoft.Testing.Platform 的“dotnet test”支持。简而言之Microsoft.Testing.Platform 是 VSTest 的现代替代方案。在 Azure DevOps 中运行测试从 2.263.0 版本开始DotNetCoreCLI 任务现在支持 Microsoft.Testing.Platform在 Azure DevOps 中使用 Microsoft.Testing.Platform 运行测试主要有两种选择选项 1使用 DotNetCoreCLI 任务推荐从版本 2.263.0 开始DotNetCoreCLI Azure DevOps 任务现在支持Microsoft.Testing.Platform 。-task:DotNetCoreCLI2 displayName:Run tests inputs: command:test projects:**/*Tests.csproj arguments:--no-build --report-trx发生了什么变化 Microsoft.Testing.Platform 使用与 VSTest 不同的命令行标志。例如使用 --report-trx 而不是 --logger trx。有关选项的完整列表请参阅 Microsoft.Testing.Platform CLI 文档。选项 2直接运行“dotnet test”您可以dotnet test使用脚本或命令行任务直接运行该命令。这样可以最大限度地提高灵活性并且不需要对 Azure DevOps 任务进行任何特定的更新。-task:CmdLine2 displayName:Run tests inputs: script:dotnet test --no-build --report-trx何时使用此方法如果您需要围绕测试执行编写自定义脚本或者想要避免对特定任务版本的依赖请选择此方法。从 VSTest 任务迁移VSTest Azure DevOps 任务是专门为 VSTest 设计的不支持 Microsoft.Testing.Platform。如果您当前正在使用 VSTest 任务切换到选项 1DotNetCoreCLI 任务可获得最相似的体验。请将命令行参数更新为使用 Microsoft.Testing.Platform 语法测试您的管道以确保测试发现和执行按预期工作。选项 1 和选项 2 都提供了与 VSTest 任务相同的测试执行功能。发布支持重试的测试结果问题在于当您使用Retry 扩展程序自动重新运行失败的测试时Microsoft.Testing.Platform 会为每次尝试生成一个单独的 TRX 文件。以前该PublishTestResults任务会将这些 TRX 文件视为独立的测试运行从而导致两个问题退出代码错误即使重试后测试最终通过任务仍然会失败。用户界面令人困惑测试结果显示为单独的运行结果而不是分组的重试尝试结果。我们已经解决了这个问题PublishTestResults现在该任务可以智能地处理来自重试尝试的多个 TRX 文件正确地对它们进行分组并设置适当的退出代码。你需要知道Microsoft.Testing.Platform 通过Microsoft.Testing.Extensions.TrxReport包使用标准 TRX 格式也称为 VSTest 测试结果格式。PublishTestResults任务一直支持 TRX 文件。新增功能是对重试场景的智能处理。所需配置要启用重试感知测试结果发布功能请在管道中设置该AllowPtrToDetectTestRunRetryFiles变量true。此选项启用新行为后系统会将多个 TRX 文件正确解释为重试尝试而不是单独的测试运行。重要提示此变量必须在管道级别设置在您的 YAML 文件或管道变量中。如果在项目或组织级别设置则无效。完整的管道示例以下是一个完整的测试流程演示了如何执行测试、重试以及如何正确发布结果trigger: -main jobs: -job:MyJob variables: AllowPtrToDetectTestRunRetryFiles:true steps: # Your usual steps to install .NET SDK, restore, and build. -task:CmdLine2 displayName:Run tests inputs: script:dotnet test --no-build --report-trx --retry-failed-tests 3 --results-directory TestResults -task:PublishTestResults2 displayName:Publish test results inputs: testResultsFormat:VSTest testResultsFiles:**/*.trx mergeTestResults:true failTaskOnFailedTests:true condition:succeededOrFailed()该流程的关键点该AllowPtrToDetectTestRunRetryFiles: true变量启用重试感知行为该--retry-failed-tests 3标志指示测试平台重试失败的测试最多 3 次。condition: succeededOrFailed()即使测试失败也能确保测试结果发布。了解重试结果让我们看看 Azure DevOps UI 如何显示不同重试场景下的结果。假设有一个测试套件其中包含一个始终通过的稳定测试和一个间歇性失败的不稳定测试。场景 1所有测试均一次性通过所有测试立即通过时您会看到标准的成功指示器。PublishTestResults任务成功完成。场景 2重试后测试通过这就是新行为的优势所在。用户界面显示测试在前两次尝试中失败但在第三次尝试中成功。尽管最初出现了失败但PublishTestResults由于测试最终成功任务仍然通过。这才是处理不稳定测试的正确做法。场景 3测试在所有重试尝试中均失败如果测试在所有尝试中均失败用户界面会将所有失败项分组显示以便于查看。您可以检查每个单独的失败项以识别模式或差异。PublishTestResults当条件为真时任务会按预期失败failTaskOnFailedTests。为什么这很重要这里需要区分 VSTest 和 Microsoft.Testing.PlatformVSTest 本身没有内置的重试支持因此这种情况不会自然发生。而 Microsoft.Testing.Platform 的重试扩展则提供了自动重试处理功能并与 Azure DevOps 完美集成无需编写任何自定义脚本。立即开始Azure DevOps 现在全面支持 Microsoft.Testing.Platform——从运行测试到发布重试结果并进行智能处理。准备迁移更新至 .NET SDK 10将 Retry 扩展添加到您的测试项目中AllowPtrToDetectTestRunRetryFiles: true在您的管道中设置--retry-failed-tests使用标志运行测试需要帮助吗我们随时为您服务提问GitHub 讨论区报告问题GitHub Issues了解更多信息Microsoft.Testing.Platform 文档原文链接Microsoft.Testing.Platform Now Fully Supported in Azure DevOps推荐阅读【译】 安全智能MongoDB EF Core 提供程序中的可查询加密和向量搜索【译】 我们如何同步 .NET 的虚拟单体仓库二【译】 我们如何同步 .NET 的虚拟单体仓库一【译】 如何使用 .NET MAUI 构建 Android 小部件【译】 GitHub Copilot Testing for .NET 将 AI 驱动的单元测试引入 Visual Studio 2026Maomi.MQ 功能强大的 .NET RabbitMQ 消息队列通讯模型框架来了点击下方卡片关注DotNet NB一起交流学习▲点击上方卡片关注DotNet NB一起交流学习请在公众号后台回复【路线图】获取.NET 2024开发者路线回复【原创内容】获取公众号原创内容回复【峰会视频】获取.NET Conf大会视频回复【个人简介】获取作者个人简介回复【年终总结】获取作者年终回顾回复【加群】加入DotNet NB 交流学习群长按识别下方二维码或点击阅读原文。和我一起交流学习分享心得。