如何不丢失与tfs构建的并行测试并保持构建代理的工作



我正在建立TFS测试构建,并希望支持完全并行测试。只有我们的一些测试是并行运行的,因此在它们完成在构建代理上的运行后,构建代理不会得到新的测试来进行测试。因此,一个花了我们30分钟的构建开始需要一个小时甚至更长的时间,因为所有重命名测试都只在一个构建代理上运行。所有其他20个构建代理在几分钟后停止运行,因为它们完成了大部分测试的运行。我们使用MSTest2运行并行测试。我们的RunSettings.RunSettings声明以并行方式运行,并且是正确的。

我们在生成上尝试了不同的高级执行选项。我们根据过去的测试运行时间进行了尝试。基于测试和代理的数量以及基于测试组件。这些都不起作用——在特工完成了大部分测试后,他就又回到了空闲状态。我们试图让构建中的机器每批量只进行一次测试,这确实更快,但我们失去了在每台机器上进行并行测试的特权。

我们希望我们的构建以这种方式运行:我们启动它,测试开始运行。所有机器都将获得要运行的测试计数。当构建代理完成运行他得到的所有测试时,它将从一台没有完成测试的机器上获得测试。通过这种方式,我们将在机器上享受并行测试构建和并行测试。我们不想达到构建有两个步骤的地步——一个步骤并行运行测试,另一个步骤不并行运行测试。

是否可以创建一个满足以上所有问题的构建?因此,我们开始失去理智,我们没有找到可以随心所欲的构建示例。或者如何至少更改设置,以防止生成代理在完成批量后停止获取新测试。

致以最良好的问候,我希望我把自己说得足够清楚。

不,这是不可能的。测试在测试运行开始时分发。您可以做以下操作:
  • 确保所有慢速测试都使用[TestCategory("slow")]属性进行标记
  • 在Azure Pipelines中创建一个"运行测试"任务,并使用筛选器运行所有测试慢速测试除外。这将在所有代理中分配剩余的测试
  • 在Azure管道中创建一个"运行测试"任务,并使用筛选器仅运行慢速测试。这将把所有慢速测试分发给所有代理

您最终会进行两次测试运行,但您的测试将更加平均地分布。

作为一个额外的优势,如果你的一个快速测试已经失败,你的慢速测试可以选择性地跳过。

基本上我在这里写的博客:

  • 现代构建:https://jessehouwing.net/staged-execution-of-tests-in-azure-devops-pipelines/
  • XAML生成:https://jessehouwing.net/xaml-build-staged-execution-of-unit-tests/

相关内容

  • 没有找到相关文章

最新更新