Запуск тестов nUnit многопоточным способом

Можно ли запускать тесты nunit многопоточным способом? Есть ли какой-нибудь бегун, который может это предоставить?

Прежде чем перейти к концепции "unit test", позвольте мне объяснить: это не модульные тесты, мы используем nunit для тестирования функциональности и интеграции, а некоторые из этих тестов невероятно медленны, получил много состояний ожидания. Поэтому многопоточность может помочь им в массовом масштабе.

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

Ответ 1

Попробуйте Pnunit

Ответ 2

Но, конечно, нам тоже нужна поддержка TeamCity;-)

Предположительно NUnit3 будет иметь поддержку многопоточности.

Ответ 3

вот ссылка на PNUint http://www.codicesoftware.com/opdownloads2/oppnunit.aspx. Мы используем его как часть среды для загрузки теста веб-приложения с обширной функциональностью ajax

Ответ 4

Возможно, вам стоит взглянуть на многопоточную тестовую среду Overshore, которая имеет класс ThreadManager, который вы всегда можете расширить, чтобы добавить концепцию "неудачных" тестов.

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

Если вы используете только утверждения, вы можете подсчитать исключения.

Удачи.

ps: почему бы не запустить несколько nant/nunit-runner из процесса?

Ответ 5

Я работаю над .NET-портом многоязычной библиотеки Java. Мой порт называется Ticking Test, а исходный код опубликован в GitHub.

TickingTest изначально не предназначался для того, чтобы делать то, что вы пытаетесь, но это может сработать. Он позволяет вам написать тестовый класс с несколькими методами, отмеченными атрибутом TestThread. Каждый поток может дождаться появления определенного количества меток или утверждать, что, по его мнению, будет текущий счетчик тиков. Когда все текущие потоки блокируются, поток координаторов продвигает количество тиков и просыпает все потоки, ожидающие следующего количества отсчетов. Если вам интересно, посмотрите примеры MultithreadedTC. MultithreadedTC был написан некоторыми из тех же людей, которые писали FindBugs.

Я успешно использовал порт в небольшом проекте. Основная недостающая функция заключается в том, что у меня нет способа отслеживать только что созданные потоки во время теста.

Ответ 6

Я не могу поверить, что MSTest не указан. Visual Studio поддерживает несколько параллельных тестов на века.

Ответ 7

Мы устанавливаем рекурсивный MSBuild script для одновременного запуска dlls unit test, который выглядит примерно так:

  <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