如何并行运行MSpec测试程序集?

时间:2014-07-07 13:38:05

标签: c# parallel-processing teamcity mspec

我们有以下设置:

  • Team City v8.1.2
  • .NET 2013解决方案,包含多个不同的C#项目(ASP.NET MVC, 图书馆,测试项目等。)
  • 我们95%的测试都是MSpec,但我们也有一些NUnit测试。
  • 我们有14个测试项目正在增长......

目前测试阶段大约需要9分钟进行MSpec测试,1分钟进行NUnit测试。我们希望开始并行化,因为我们希望测试数量能够快速增长。什么是最好的解决方案,只要:

  • MSpec似乎没有任何平行的跑步者。
  • 测试应该按照程序集进行并行化,测试在同一个程序集中按顺序运行。
  • 并行化不应影响我们显示构建结果的方式。我们仍然希望现在所有内容都聚合在一起。
  • 与开发人员的本地执行不应该有任何摩擦。机。无论设置如何,都不需要在本地运行我们的测试更复杂。如果解决方案,无论它是什么,允许我们并行本地运行测试,这将是伟大的。
  • 我们更倾向于使用每个构建代理的并行功能,而不是在多个代理上运行,因为我们按代理付费。

2 个答案:

答案 0 :(得分:2)

要与TeamCity并行运行MSpec测试,您可以使用 mspec-teamcity-prunner.exe ,这是标准MSpec跑步者的替代品。

在TeamCity中创建/修改标准MSpec Build Step,然后将mspec.exe的路径替换为mspec-teamcity-prunner.exe

默认情况下,该工具最多可并行运行2个测试程序集,但可以通过--threads N)字段中的--threads 4(例如Additional command line parameters: 4个线程)来控制。{ / p>

答案 1 :(得分:0)

我不确定您是如何配置构建的测试部分的:MSBuild exec任务,Albacore mspec命令或内置TeamCity {{ 3}}。无论如何,它们都会在某个时刻运行mspec命令行。 mspec的命令行用法是将所有测试程序集传递给测试运行器。

> mspec.exe [options] <assemblies>

然后,通用解决方案是构造多个mspec运行,每个运行配置为运行单个程序集。

> mspec.exe [options] <assmebly1>
> mspec.exe [options] <assembly2>
> mspec.exe [options] <assembly3>

然后您将并行运行每个任务。我不认为TeamCity有并行步骤的概念。 MSBuild似乎也没有普通MSpec runner,但您可以使用parallel tasks伪造它。

其他构建系统确实提供并行任务,例如Rake an extension。如果配置每个单独的任务,则可以将父任务标记为并行运行所有相关任务。

multitask :test => [:test_assmebly1, :test_assembly2, :test_assembly3]