NUnit 3.0 теперь поддерживается TeamCity 9.1.x, однако вам нужно установить бегун и указать путь к nunit3.console.exe на этом шаге. Мой вопрос: где скопировать nunit3-console.exe? Должен ли я поместить это на всех агентов? Я помещаю его в каталог на моем основном сервере TeamCity, и он будет разделяться или вытягиваться агентами? Кажется, нет хорошей документации о том, где копировать эти файлы, чтобы все агенты могли их использовать.
Как установить nUnit 3 nunit3-console.exe в TeamCity 9.x
Ответ 1
У вас должна быть консоль 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.
Ответ 2
Основываясь на ответе @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 script, чтобы определить правильный каталог пакетов 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 script. Вам также необходимо определить переменную nunit.consolerunner.directory
со значением по умолчанию пустым.
script также выдаст исключение, если по какой-либо причине невозможно найти каталог NUnit.ConsoleRunner.
Ответ 3
Также вы можете выполнить следующую инструкцию: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit
Ответ 4
Сборка выполняется на агенте, поэтому вам нужно установить NUnit3 для всех агентов, в которых вы хотите запустить сборку.
Ответ 5
Есть некоторые проблемы, связанные с бегуном TeamCity - в частности, его поведение по умолчанию заключается в том, чтобы не запускать спецификации в своих собственных AppDomains с их собственным базовым каталогом в соответствии с NUnit2 (и тестовым адаптером NUnit3 Visual Studio).
В сборке TeamCity 9.x есть свойство конфигурации (в настоящее время недокументированное), которое позволяет вам изменить это поведение. Я написал об этом здесь.
Ответ 6
Попробуйте последнюю версию script @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']"
Ответ 7
Также на основе ответа @NikolayP:
В настоящее время NuGet поддерживает аргумент командной строки -ExcludeVersion
для операции install
. Из docs:
Устанавливает пакет в папку с именем только с именем пакета и а не номер версии.
Это приводит к тому, что этот путь довольно прост в использовании на следующем этапе сборки NUnit runner и позволяет отказаться от умного обходного пути @NathanAldenSr.
Как и в TeamCity 2017.1.3 (и, возможно, более ранних версиях), эта функция даже отображается как параметр для NuGet Installer runner ( см. Параметры восстановления).