【问题标题】:TFS 2013 Build: Running Unit Tests in Parallel on multiple build agentsTFS 2013 Build:在多个构建代理上并行运行单元测试
【发布时间】:2018-05-04 09:28:28
【问题描述】:

我有一个运行 MSTest 单元测试的 XAML 构建定义,执行所有这些测试需要很长时间。我在构建环境中设置了 4 个构建代理(每个具有 1 个核心的 VM)。我在 XAML 中使用 Microsoft.TeamFoundation.Build.Activities.RunAgileTestRunner 活动,该活动位于“在代理上运行”(Microsoft.TeamFoundation.Build.Workflow.Activities.AgentScope) 活动中。

目前,单元测试在其中一个代理上执行。我希望能够将单元测试分发给其他可用的代理。有没有办法通过 TFS 配置或更改构建定义来做到这一点。

作为一种解决方法,我可以将单元测试项目拆分为多个项目并在可用代理上分别运行它们,但是我将无法在一个地方看到构建摘要。

什么是最好的解决方案?

【问题讨论】:

  • 您的测试运行需要多长时间?您可以将测试分为构建期间和构建后吗?
  • 22 小时(我知道,我知道,这些更多的是集成测试而不是单元测试,但这是另一回事)。您能否提供更多关于如何将测试拆分为构建期间和构建后的信息?
  • 在做任何其他事情之前,您应该努力削减这些/使它们运行得更快。之后,您应该考虑将它们移至部署后测试。
  • 是的,这就是计划。但是,当第一个构建代理运行这些测试时,我的其他 3 个构建代理处于空闲状态。在构建代理之间拆分测试执行以加快执行,同时对底层测试的更改最少。
  • 除非这不是这些代理的用途,尽管我理解使用所有可用“线程”的愿望。问题是,如果您希望能够根据测试失败/回滚,则需要将它们与它们关联的构建/部署内联。

标签: c# unit-testing tfs mstest


【解决方案1】:

看看这篇文章:How to run automated tests on different machines in parallel?

推荐选项:

  • 创建多个环境,每个环境由单个机器组成(读取单个代理)。

  • 将所有测试用例划分到不同的集合中,将一个集合放在一个环境中,将另一个集合放在另一个环境中,以此类推。

  • 这样,每组测试将在不同的机器上并行运行。

还可以参考以下文章:


此外,如果可以选择升级到 VNext 版本,那么您可以按照以下文章中提到的步骤轻松实现:

【讨论】:

  • 由于我将测试拆分为多个程序集,因此我尝试按照上述链接之一的建议在 ParallelForEach 中运行每个集合。现在,构建错误并显示消息“无法执行测试,因为已经有一个活动的测试运行。”看起来 TFS 不支持在同一个代理上执行并行测试,有什么想法吗?
  • 我尝试运行 MSTest 测试运行程序而不是 RunAgileTestRunner。我能够在 ParallelForEach 循环中运行多个 MSTest 会话。但是,现在执行单个测试需要更长的时间,并且所花费的总时间增加而不是减少。很奇怪!有什么想法或帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
相关资源
最近更新 更多