2012-07-02 3 views
0

Так что я думал, что должен быть лучший способ запуска тестов NUnit для проекта .net через teamcity. В настоящее время сборка проекта занимает около 10 минут, а этап тестирования занимает 30 минут.TeamCity запускает тесты Nunit в Parallel

Я думал о разделении тестов Nunit на 3 группы, назначая их каждому другому агенту. И затем убедитесь, что они имеют зависимость от начальной сборки до их начала.

Это был лучший способ, я думал об этом, есть ли другой способ, я должен также рассмотреть?
На стороне примечания Можно ли объединить все тесты Nunit в конце, чтобы получить один отчет от тестов, которые строятся на трех разных машинах? Я не думаю, что это возможно, если кто-то не подумает о умном хаке.

ответ

1

Для параллельного выполнения тестовых NUnit, пожалуйста, посмотрите, чтобы PnUnit в http://www.nunit.org/index.php?p=pnunit&r=2.5 и отчеты можно настроить для использования Log4Net для NUnit смотрите пример здесь: http://www.softwarefrontier.com/2007/09/using-log4net-with-nunit.html

+0

Большое спасибо, я даже не знал об этих вещах! –

+0

Это не то, что PNUnit предназначен для: «PNUnit не предназначен для« случайного »параллелизма просто для того, чтобы тесты выполнялись быстрее, а скорее предназначались для тестирования приложений, состоящих из распределенных, сообщающихся компонентов». – autonomatt

1

Мы создали рекурсивный скрипт MSBuild для запуска теста блока DLLS одновременно , который выглядит somelike это:

<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) на самом деле построить тест DLLs первым.

Это также портит результаты NUnit для местных разработчиков, но ударившись эту проблему уже, мы написали инструмент, чтобы помочь с этим: https://github.com/15below/NUnitMerger

Смежные вопросы