如何并行运行MSpec测试程序集
本文关键字:MSpec 测试 测试程序 程序集 运行 何并行 并行 | 更新日期: 2023-09-27 18:11:41
我们有以下设置:
- Team City v8.1.2
- 。. NET 2013解决方案与几个不同的c#项目(ASP。净MVC,库、测试项目等) 我们95%的测试是MSpec,但我们也有一些NUnit测试。
- 我们有14个测试项目,并且还在不断增长…
目前,MSpec测试阶段大约需要9分钟,NUnit测试阶段需要1分钟。我们希望开始并行化,因为我们预计测试的数量会快速增长。最好的解决方案是什么,如果:
- MSpec似乎没有任何并行运行器。
- 每个程序集应并行化测试,这些测试在同一程序集中顺序运行。 并行化不应该影响我们如何显示构建结果。我们仍然希望所有的东西都像现在一样汇总。
- 在开发人员的机器上本地执行不应该有任何摩擦。无论设置是什么,都要求不会使本地运行测试变得更加复杂。如果解决方案,无论它是什么,允许我们在本地并行运行测试,那将是伟大的。
- 我们更喜欢利用每个构建代理的并行能力进行扩展,而不是在多个代理上运行,因为我们为每个代理付费。
要与TeamCity并行运行MSpec测试,您可以使用 MSpec - TeamCity -prunner.exe,这是标准MSpec运行程序的直接替代品。
在TeamCity中创建/编辑一个标准MSpec Build Step
,然后将mspec.exe
的路径替换为mspec-teamcity-prunner.exe
默认情况下,该工具将并行运行最多2个测试程序集,但这可以通过在Additional command line parameters:
字段中使用--threads N)
(例如--threads 4
为4个线程)来控制。
我不确定你如何配置你的构建的测试部分:一个MSBuild exec
任务,一个Albacore mspec
命令,或内置的TeamCity MSpec运行器。不管怎样,它们都在某个时候运行mspec命令行。mspec的命令行用法是将所有测试程序集传递给测试运行器。
> mspec.exe [options] <assemblies>
一般的解决方案是构造多个mspec运行,每个配置为运行单个程序集。
> mspec.exe [options] <assmebly1>
> mspec.exe [options] <assembly2>
> mspec.exe [options] <assembly3>
然后并行运行这些任务。我不认为TeamCity有平行步骤的概念。MSBuild似乎也没有一般的并行任务,但你可以通过扩展来实现。
其他构建系统确实提供并行任务,比如Rake的multitask
。如果您配置了每个单独的任务,则可以将父任务标记为并行运行所有依赖的任务。
multitask :test => [:test_assmebly1, :test_assembly2, :test_assembly3]