CC.NET: распараллелить тесты NUnit - PullRequest
4 голосов
/ 17 января 2012

У нас есть 3 DLL модульных тестов, выполнение которых занимает 1 час (30, 20 и 10 минут каждый).Одновременный запуск занимает не более 30 минут.

Вы знаете, возможно ли и как распараллелить выполнение NUnit в CC.Net или «внутри» процесса NUnit:

  • запустить 3 DLL одновременно

или,

  • запустить много тестов в 1 DLL как параллельные процессы

Ответы [ 3 ]

1 голос
/ 31 января 2012

Если вы используете NUnit, посмотрите на:

Кроме того, см. Этот SO-ответ на ту же тему для некоторых других идей:
Как запустить параллельные тесты NUnit?

1 голос
/ 25 июня 2012

В итоге мы запустили наши тесты параллельно через 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>
0 голосов
/ 17 января 2012

Вы можете использовать параллельные задачи для параллельного запуска нескольких процессов NUnit.

...