繁体   English   中英

以多线程方式运行nUnit测试

[英]Running nUnit tests in a multithreaded fashion

是否有可能以多线程方式运行nunit测试? 有没有跑步者可以提供这个?

在有人跳过“单元测试”概念之前,让我解释一下:这些不是我们使用nunit进行功能/集成测试的单元测试 ,其中一些测试非常慢,有很多等待状态。 因此,多线程可以大量帮助他们。

我知道作为最后的手段,我可​​以在测试中推出自己的多线程,但这会引入不必要的开销。

试试Pnunit

但是当然我们也必须得到TeamCity的支持;-)

据称NUnit3将支持多线程。

这里是对PNUint http://www.codicesoftware.com/opdownloads2/oppnunit.aspx的引用。 我们使用它作为环境的一部分来加载测试具有广泛的ajax功能的Web应用程序

我不敢相信MSTest没有列出。 Visual Studio一直支持多个并发测试。

我们设置了一个递归的MSBuild脚本来同时运行单元测试dll,它看起来像这样:

  <Target Name="UnitTestDll">
    <Message Text="Testing $(NUnitFile)" />
    <ItemGroup>
      <ThisDll Include="$(NUnitFile)"/>
    </ItemGroup>
    <NUnit ToolPath="$(NUnitFolder)" Assemblies="@(ThisDll)" OutputXmlFile="$(TestResultsDir)\%(ThisDll.FileName)-test-results.xml" ExcludeCategory="Integration,IntegrationTest,IntegrationsTest,IntegrationTests,IntegrationsTests,Integration Test,Integration Tests,Integrations Tests,Approval Tests" ContinueOnError="true" />
  </Target>

  <Target Name="UnitTest" DependsOnTargets="Clean;CompileAndPackage">
      <Message Text="Run all tests in Solution $(SolutionFileName)" />
      <CreateItem Include="$(SolutionFolder)**\bin\$(configuration)\**\*.Tests.dll" Exclude="$(SolutionFolder)\NuGet**;$(SolutionFolder)**\obj\**\*.Tests.dll;$(SolutionFolder)**\pnunit.tests.dll">
        <Output TaskParameter="Include" ItemName="NUnitFiles" />
      </CreateItem>
    <ItemGroup>
      <TempProjects Include="$(MSBuildProjectFile)">
        <Properties>NUnitFile=%(NUnitFiles.Identity)</Properties>
      </TempProjects>
    </ItemGroup>
    <RemoveDir Directories="$(TestResultsDir)" Condition = "Exists('$(TestResultsDir)')"/>
    <MakeDir Directories="$(TestResultsDir)"/>

    <MSBuild Projects="@(TempProjects)" BuildInParallel="true" Targets="UnitTestDll" />
  </Target>

你显然仍然需要你的编译目标(或者在我们的例子中是CompileAndPackage)来实际构建测试dll。

这也为大多数报告工具弄乱了你的NUnit结果,但是我们已经编写了一个工具来解决这个问题: https//github.com/15below/NUnitMerger

您可能希望查看Overshore多线程测试框架,该框架具有ThreadManager类,您可以始终稍微扩展以添加“失败”测试的概念。

http://weblogs.asp.net/rosherove/archive/2007/06/22/multi-threaded-unit-tests-with-osherove-threadtester.aspx

如果您只使用断言,则可以计算异常。

祝好运

ps:为什么不运行几个nant / nunit-runner进程?

我正在使用MultithreadedTC Java库的.NET端口。 我的端口称为Ticking Test ,源代码在GitHub上发布。

TickingTest最初并不打算做你正在尝试的事情,但它可能会奏效。 它允许您使用标记有TestThread属性的多个方法编写测试类。 每个线程可以等待某个滴答计数到达,或者断言它认为当前滴答计数应该是什么。 当所有当前线程被阻塞时,协调器线程会提前滴答计数并唤醒正在等待下一个滴答计数的所有线程。 如果您有兴趣,请查看MultithreadedTC概述以获取示例。 MultithreadedTC是由编写FindBugs的一些人编写的。

我在一个小项目中成功使用了我的端口。 缺少的主要功能是我无法在测试期间跟踪新创建的线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM