CC.NET:并行化NUnit测试

时间:2012-01-17 12:05:12

标签: nunit parallel-processing cruisecontrol.net

我们有3个单元测试DLL需要1小时才能执行(每个30,20和10分钟)。同时跑,不需要超过30分钟。

您是否知道在CC.Net或“内部”NUnit流程中并行执行NUnit是否可能,以及如何:

  • 同时运行3 DLL

或,

  • 在1个DLL中运行许多测试作为并行进程

3 个答案:

答案 0 :(得分:1)

如果您使用的是NUnit,请查看:

另外,对于其他一些想法,请参阅同一主题的SO答案:
How can I run NUnit tests in parallel?

答案 1 :(得分:1)

我们最终通过MSBuild并行运行测试,然后将生成的(多个)测试结果文件合并到一个文件中以便于报告 - CC.Net很乐意在构建服务器上为您执行此操作,但它是很高兴开发者也可以在他们自己的机器上获得有意义的结果。

示例代码如下所示:

<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" />

  <ItemGroup>
    <ResultsFiles Include="$(TestResultsDir)\*.xml" />
  </ItemGroup> 

  <NUnitMergeTask FilesToBeMerged="@(ResultsFiles)" OutputPath="$(MSBuildProjectDirectory)\TestResult.xml" />
</Target>

答案 2 :(得分:0)

您可以使用parallel tasks并行运行多个NUnit进程。