【问题标题】:How do I run MSpec test assemblies in parallel?如何并行运行 MSpec 测试程序集?
【发布时间】:2014-07-07 13:38:04
【问题描述】:

我们有以下设置:

  • 团队城市 v8.1.2
  • .NET 2013 解决方案,包含多个不同的 C# 项目(ASP.NET MVC、 库、测试项目等)
  • 我们 95% 的测试都是 MSpec,但我们也有一些 NUnit 测试。
  • 我们有 14 个测试项目,并且还在不断增长中......

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

  • MSpec 似乎没有任何并行运行器。
  • 测试应按程序集并行化,这些测试在同一程序集中按顺序运行。
  • 并行化不应影响我们显示构建结果的方式。我们仍然希望所有内容都按现在的样子聚合。
  • 不应与开发人员机器中的本地执行有任何摩擦。无论设置是什么,都要求不要使在本地运行我们的测试变得更加复杂。如果解决方案(无论是什么)允许我们在本地并行运行测试,那就太好了。
  • 我们更喜欢利用每个构建代理的并行功能进行扩展,而不是在多个代理上运行,因为我们按代理付费。

【问题讨论】:

    标签: c# parallel-processing teamcity mspec


    【解决方案1】:

    要与 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 个线程)来控制。

    【讨论】:

      【解决方案2】:

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

      > mspec.exe [options] <assemblies>
      

      一般的解决方案是构建多个 mspec 运行,每个运行配置为运行单个程序集。

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

      然后您将并行运行这些任务中的每一个。我认为 TeamCity 没有并行步骤的概念。 MSBuild 似乎也没有通用的parallel tasks,但你可以用an extension 伪造它。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多