如何并行运行NUnit测试?

如何并行运行NUnit测试?,nunit,Nunit,我有一个使用NUnit编写的大型验收测试(每个测试约10秒)测试套件。我想利用我的机器都是多芯盒这一事实。理想情况下,我可以让每个核心运行一个测试,独立于其他测试 有PNUnit,但它是为测试线程同步问题和类似的问题而设计的,我没有看到一个明显的方法来实现这一点 是否有一个开关/工具/选项可用于并行运行测试?这可能有点麻烦,但您可以将单元测试拆分为多个测试。然后,为每个类别启动一个新的NUnit实例 编辑:看起来他们在控制台应用程序中添加了一个/process选项。命令行帮助说明这是“测试的流程

我有一个使用NUnit编写的大型验收测试(每个测试约10秒)测试套件。我想利用我的机器都是多芯盒这一事实。理想情况下,我可以让每个核心运行一个测试,独立于其他测试

有PNUnit,但它是为测试线程同步问题和类似的问题而设计的,我没有看到一个明显的方法来实现这一点


是否有一个开关/工具/选项可用于并行运行测试?

这可能有点麻烦,但您可以将单元测试拆分为多个测试。然后,为每个类别启动一个新的NUnit实例

编辑:看起来他们在控制台应用程序中添加了一个/process选项。命令行帮助说明这是“测试的流程模型:单个、单独、多个”。测试运行程序似乎也具有此功能

编辑2:不幸的是,尽管它确实为每个程序集创建了单独的进程,但是进程隔离选项(/processfrom命令行)一次运行一个代理。

中提到,为了加快测试速度,海报运行NUnit的多个实例,命令参数指定每个实例应运行哪些测试

自由贸易协定:

我遇到了一个奇怪的问题

我们使用nunit控制台来运行测试 我们的持续集成服务器。 最近我们从努尼特搬走了 2.4.8到2.5.5,以及从.Net 3.5到4.0。为了加快测试执行,我们在中运行多个Nunit实例 与不同的命令行并行 论据

  • 我们有两个测试程序集和nunit二进制文件的副本 文件夹A和B
  • 在文件夹A中,我们执行
nunit-console-x86.exe Model.dll Test.dll/exclude:MyCategory /xml=TestResults.xml /framework=net-4.0/noshadow

  • 在文件夹B中,我们执行
nunit-console-x86.exe Model.dll Test.dll/include:MyCategory /xml=TestResults.xml /framework=net-4.0/noshadow

如果我们按顺序执行命令 两者都成功运行。但是如果我们 只并行执行一次 成功。据我所知是 首先加载测试的那个 固定设施另一个失败了 消息“无法定位夹具”

这个问题已经知道了吗?我可以 在错误中找不到任何相关内容 启动板上的列表。顺便说一句,我们的服务器正在运行 Windows Server 2008 64位。我可以 也可以在Windows上重现该问题 7 64位

假设此错误已修复,或者您没有运行上述软件的较新版本,您应该能够复制他们的技术

更新

看起来像是一个可以用来自动运行NUnit测试的工具。他们有一个NUnit启动器,可以用来启动多个NUnit实例。是一篇讨论将多个NUnit XML结果合并到单个结果文件的博客文章

因此,从理论上讲,您可以让TeamCity根据需要自动启动多个NUnit测试,但是您希望分割工作负载,然后将结果合并到单个文件中进行测试后处理


自动化程度是否足以满足您的需要?

仅仅因为PNUnit可以在测试代码中进行同步并不意味着您实际上必须使用该方面。就我所知,没有什么可以阻止你只是生成一个集合而忽略其他集合,直到你需要它

顺便说一句,我没有时间阅读他们所有的源代码,但我很想看看Barrier类,它是一个非常简单的锁计数器。它只是等待N个线程进入,然后发送脉冲,让所有线程同时继续运行。这就是它的全部——如果你不碰它,它就不会咬你


对于普通的线程化开发来说,这可能有点违反直觉(锁通常用于序列化访问-1乘1),但这是一个非常有趣的转移:-)

如果您想并行运行NUnit测试,至少有两个选项:

  • NCrunch提供开箱即用(不做任何更改,但属于商业产品)
  • NUnit3提供了一个属性,可以用来表示哪些测试可以并行运行

既然这里没有提到这个项目,我想提一提。我自己还没有尝试过这个项目,但它似乎有一种有趣的方法来解决NUnit的并行测试问题。

如果您的项目包含多个测试DLL,您可以使用此MSBuild脚本并行运行它们。显然,您需要调整路径以适合您的项目布局

要使用8个内核运行,请使用以下命令运行:
c:\proj>msbuild/m:8 RunTests.xml

RunTests.xml


释放
$(MSBuildProjectDirectory)\..\tools\nunit-console-x86.exe
TestDllFile=%(TestDlls.FullPath)
更新 如果我现在回答这个问题,我强烈推荐NCrunch及其命令行测试运行工具,以获得最高的测试运行性能。没有比它更好的了,同时它将彻底改变您的代码测试调试周期。

您现在可以使用它来并行单元测试,甚至可以配置NCrunch应该使用多少内核以及visualstudio应该使用多少内核

另外,您还可以获得持续测试作为奖励:)

您可以尝试我的小工具或控制台并行甚至插件来进行分布式计算,它还可以在一组PC上运行单元测试

创建TBox是为了简化大型解决方案的工作,其中包含许多项目。它支持许多插件,其中一个插件提供并行运行NUnit测试的能力。此插件不需要对现有测试进行任何更改

它还支持:

  • 使用单元测试克隆文件夹(如果测试更改
    PS> nunit3-console (ls -r *\bin\Debug\*.Tests.dll | % FullName | sort-object -Unique)
    
    // Make all tests in the test assembly run in parallel
    [assembly: Parallelizable(ParallelScope.Fixtures)]