Как установить nUnit 3 nunit3-console.exe в TeamCity 9.x

NUnit 3.0 теперь поддерживается TeamCity 9.1.x, однако вы должны установить программу запуска и указать путь к файлу nunit3.console.exe в этом шаге. У меня вопрос, куда мне скопировать nunit3-console.exe? Должен ли я поставить это на всех агентов? Поместить ли я его в каталог на моем главном сервере TeamCity, и агенты получат к нему общий доступ? Кажется, нет хорошей документации о том, где копировать эти файлы, чтобы все агенты могли их использовать.

8 ответов

У вас должна быть консоль NUnit на каждом агенте, на котором вы хотите запускать тесты NUnit.

Лучший вариант это:

  1. Добавьте ссылку на пакет NuGet ( https://www.nuget.org/packages/NUnit.Runners/).

  2. Чтобы восстановить пакет, вы можете использовать шаг сборки "NuGet Installer", см. Следующий пост в блоге: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/

  3. После этого вы просто устанавливаете путь как "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" из восстановленного пакета NuGet.

Опираясь на ответ @NikolayP:

  1. Добавьте ссылку на пакет NuGet ( https://www.nuget.org/packages/NUnit.Runners/).
  2. Чтобы восстановить пакет, вы можете использовать шаг сборки "NuGet Installer", см. Следующий пост в блоге: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
  3. После этого вы просто устанавливаете путь как "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" из восстановленного пакета NuGet.

Я написал следующий скрипт PowerShell, чтобы определить правильный каталог пакета NUnit.ConsoleRunner и заполнить переменную TeamCity перед запуском задачи NUnit. Он использует самую последнюю версию пакета NUnit.Console.

$SrcDirectory = "%src.directory%"
$PackagesDirectory = Join-Path $SrcDirectory packages

$NUnitConsoleRunnerPackageDirectory = Get-ChildItem (Join-Path $PackagesDirectory NUnit.ConsoleRunner.*) | %{
    @{
        Directory = $_.FullName
        Version = [Version]::Parse(($_.Name -replace "NUnit.ConsoleRunner.",""))
    }
} | Sort-Object Version -Descending | Select-Object -First 1 | %{ $_.Directory }

if (!$NUnitConsoleRunnerPackageDirectory) {
    throw [IO.DirectoryNotFoundException] "NUnit console runner package directory not found"
}

Write-Output "##teamcity[setParameter name='nunit.consolerunner.directory' value='$NUnitConsoleRunnerPackageDirectory']"

Обратите внимание, что вам нужно определить src.directory переменная, чтобы указать на каталог, который содержит packages каталог на вашем агенте сборки или иным образом предоставьте необходимый корневой каталог для работы скрипта PowerShell. Вам также необходимо определить nunit.consolerunner.directory переменная со значением по умолчанию пустым.

Сценарий также вызовет исключение, если по какой-либо причине каталог NUnit.ConsoleRunner не найден.

Также вы можете следовать этой инструкции: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit

Есть некоторые ошибки, связанные с бегуном TeamCity - в частности, его поведение по умолчанию не в том, чтобы запускать спецификации в своих собственных доменах приложений со своим собственным базовым каталогом согласно NUnit2 (и тестовому адаптеру Visual Studio NUnit3).

В серии сборки TeamCity 9.x есть (в настоящее время недокументированное) свойство конфигурации, которое позволяет изменить это поведение. Я написал об этом здесь.

Сборка выполняется на агенте, поэтому вам нужно установить NUnit3 на всех агентах, на которых вы хотите запустить сборку.

Также опираясь на ответ @NikolayP:

NuGet в настоящее время поддерживает аргумент командной строки -ExcludeVersion для install операция. Из документов:

Устанавливает пакет в папку с именем, содержащим только имя пакета, а не номер версии.

В результате получается путь, который довольно легко использовать на последующем шаге сборки бегуна NUnit, и позволяет отказаться от хитрого обходного пути @NathanAldenSr.

Начиная с TeamCity 2017.1.3 (и, возможно, более ранних версий), эта функция даже предоставляется в качестве параметра для программы установки NuGet (см. Параметры восстановления).

Попробуйте последнюю версию скрипта @NathanAldenSr

По-прежнему требуется переменная http://teamcityserver/admin/editProject.html?projectId=yourId&tab=projectParams Добавьте параметр nunit.consolerunner.directory в параметры конфигурации.

$SrcDirectory = "%teamcity.build.checkoutDir%"
$PackagesDirectory = Join-Path $SrcDirectory packages

Write-Output "PackagesDirectory" $PackagesDirectory

$NUnitConsoleRunnerPackageDirectory = Get-ChildItem (Join-Path $PackagesDirectory NUnit.ConsoleRunner.*) | %{
    @{
        Directory = $_.FullName
        Version = [Version]::Parse(($_.Name -replace "NUnit.ConsoleRunner.",""))
    }
} | Sort-Object Version -Descending | Select-Object -First 1 | %{ $_.Directory }

if (!$NUnitConsoleRunnerPackageDirectory) {
    throw [IO.DirectoryNotFoundException] "NUnit console runner package directory not found"
}

$NUnitConsoleRunnerPackageDirectory = Join-Path $NUnitConsoleRunnerPackageDirectory tools

Write-Output "NUnitConsoleRunnerPackageDirectory" $NUnitConsoleRunnerPackageDirectory
Write-Output "##teamcity[setParameter name='nunit.consolerunner.directory' value='$NUnitConsoleRunnerPackageDirectory']"

Я знаю, что сейчас июль 2018 года, но ни один из этих ответов не был мне понятен. Зачем мне устанавливать консоль на каждого агента. Там должен быть лучший путь. Когда я добавлял свой шаг сборки для запуска тестов, я заметил, что текст под вводом для пути к инструменту консоли NUnit говорит: "Поддерживаются пути относительно каталога извлечения". Все, что я сделал, это добавил пакеты nuget в свой тестовый проект в моем решении. Я добавил версию NUnit v3.10.1, а затем NUnit.Console v3.8.0. Затем в Team City я просто добавил относительный путь "packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe"

Другие вопросы по тегам