如何并行运行NUnit测试?
我有一个使用NUnit编写的大型验收测试(每个测试约10秒)测试套件。我想利用我的机器都是多芯盒这一事实。理想情况下,我可以让每个核心运行一个测试,独立于其他测试 有PNUnit,但它是为测试线程同步问题和类似的问题而设计的,我没有看到一个明显的方法来实现这一点如何并行运行NUnit测试?,nunit,Nunit,我有一个使用NUnit编写的大型验收测试(每个测试约10秒)测试套件。我想利用我的机器都是多芯盒这一事实。理想情况下,我可以让每个核心运行一个测试,独立于其他测试 有PNUnit,但它是为测试线程同步问题和类似的问题而设计的,我没有看到一个明显的方法来实现这一点 是否有一个开关/工具/选项可用于并行运行测试?这可能有点麻烦,但您可以将单元测试拆分为多个测试。然后,为每个类别启动一个新的NUnit实例 编辑:看起来他们在控制台应用程序中添加了一个/process选项。命令行帮助说明这是“测试的流程
是否有一个开关/工具/选项可用于并行运行测试?这可能有点麻烦,但您可以将单元测试拆分为多个测试。然后,为每个类别启动一个新的NUnit实例 编辑:看起来他们在控制台应用程序中添加了一个/process选项。命令行帮助说明这是“测试的流程模型:单个、单独、多个”。测试运行程序似乎也具有此功能 编辑2:不幸的是,尽管它确实为每个程序集创建了单独的进程,但是进程隔离选项(/processfrom命令行)一次运行一个代理。中提到,为了加快测试速度,海报运行NUnit的多个实例,命令参数指定每个实例应运行哪些测试 自由贸易协定: 我遇到了一个奇怪的问题 我们使用nunit控制台来运行测试 我们的持续集成服务器。 最近我们从努尼特搬走了 2.4.8到2.5.5,以及从.Net 3.5到4.0。为了加快测试执行,我们在中运行多个Nunit实例 与不同的命令行并行 论据
- 我们有两个测试程序集和nunit二进制文件的副本 文件夹A和B
- 在文件夹A中,我们执行
- 在文件夹B中,我们执行
自动化程度是否足以满足您的需要?仅仅因为PNUnit可以在测试代码中进行同步并不意味着您实际上必须使用该方面。就我所知,没有什么可以阻止你只是生成一个集合而忽略其他集合,直到你需要它 顺便说一句,我没有时间阅读他们所有的源代码,但我很想看看Barrier类,它是一个非常简单的锁计数器。它只是等待N个线程进入,然后发送脉冲,让所有线程同时继续运行。这就是它的全部——如果你不碰它,它就不会咬你
对于普通的线程化开发来说,这可能有点违反直觉(锁通常用于序列化访问-1乘1),但这是一个非常有趣的转移:-)如果您想并行运行NUnit测试,至少有两个选项:
- NCrunch提供开箱即用(不做任何更改,但属于商业产品)
- NUnit3提供了一个属性,可以用来表示哪些测试可以并行运行
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)]