2012-01-17 168 views
4

我們有3個需要1小時執行的單元測試DLL(每個30,20和10分鐘)。同時運行,花費的時間不會超過30分鐘。CC.NET:並行化NUnit測試

你知道,如果這是可能的,以及如何並行化CC.Net NUnit的執行,或 「內部」 NUnit的過程:

  • 在同時運行3個DLL

或者,

  • 運行許多測試在1個DLL作爲並行過程

回答

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>