Как установить 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.
Лучший вариант это:
Добавьте ссылку на пакет NuGet ( https://www.nuget.org/packages/NUnit.Runners/).
Чтобы восстановить пакет, вы можете использовать шаг сборки "NuGet Installer", см. Следующий пост в блоге: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
После этого вы просто устанавливаете путь как "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" из восстановленного пакета NuGet.
Опираясь на ответ @NikolayP:
- Добавьте ссылку на пакет NuGet ( https://www.nuget.org/packages/NUnit.Runners/).
- Чтобы восстановить пакет, вы можете использовать шаг сборки "NuGet Installer", см. Следующий пост в блоге: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
- После этого вы просто устанавливаете путь как "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"