TeamCity запускает тесты Nunit параллельно

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

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

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


person Frank Visaggio    schedule 02.07.2012    source источник


Ответы (3)


Для параллельного выполнения теста 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

person HatSoft    schedule 02.07.2012
comment
Спасибо большое, я даже не знал о таких вещах! - person Frank Visaggio; 03.07.2012
comment
PNUnit предназначен не для этого: PNUnit не предназначен для случайного параллелизма просто для ускорения выполнения тестов. Скорее, он предназначен для тестирования приложений, состоящих из распределенных взаимодействующих компонентов. - person autonomatt; 08.05.2015

Пользователи NUnit теперь могут использовать атрибут Parallelizable в разных местах, чтобы позволить NUnit выполнять тесты параллельно.

Пример:

[Parallelizable(ParallelScope.All)]
[TestFixture]
public class LengthOfStayRestServiceAsyncTests
{
    [Test]
    public void Test1()
    {
        Assert.That(true, Is.True);
    }
}

Или еще лучше, вставьте это в файл Properties\AssemblyInfo.cs вашего тестового проекта:

[assembly: Parallelizable(ParallelScope.Fixtures)]

Источник:
https://github.com/nunit/docs/wiki/Parallelizable-Attribute
https://templecoding.com/blog/2016/02/29/running-tests-in-parallel-with-nunit3

person Eleomosynator    schedule 13.09.2019

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

  <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

person mavnn    schedule 31.07.2012