Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Основываясь на ответе @NikolayP:

Я написал следующий 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.

Ответ 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 ( см. Параметры восстановления).