我正在建立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/