Выполнение тестов nUnit в многопоточном режиме - PullRequest
11 голосов
/ 08 октября 2009

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

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

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

Ответы [ 7 ]

2 голосов
/ 01 ноября 2010

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

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

2 голосов
/ 08 октября 2009

Попробуйте Pnunit

1 голос
/ 10 октября 2009

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

0 голосов
/ 02 августа 2012

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

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

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

0 голосов
/ 07 мая 2012

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

0 голосов
/ 10 октября 2009

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

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

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

0 голосов
/ 08 октября 2009

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

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

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

Удачи

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...