NUnit 3.0 теперь поддерживается TeamCity 9.1.x, однако вам нужно установить бегун и указать путь к nunit3.console.exe на шаге. Мой вопрос: где мне скопировать nunit3-console.exe? Должен ли я поставить это на всех агентов? Нужно ли помещать его в каталог на моем основном сервере TeamCity, чтобы агенты расшаривали его или извлекали? Кажется, нет хорошей документации о том, куда копировать эти файлы, чтобы все агенты могли их использовать.
Как установить nUnit 3 nunit3-console.exe в TeamCity 9.x
Ответы (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.
packages
неоптимален; разработчикам придется синхронизировать версию во всех конфигурациях сборки, чтобы жестко заданное имя каталога работало. Возможно, можно настроить отдельный шаг сборки, чтобы определить правильный путь и присвоить его переменной?
- person NathanAldenSr; 10.08.2016
Основываясь на ответе @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 не может быть найден.
Split-Path
, я смог взять информацию, уже требуемую для установки в проекте, определить правильный каталог пакетов и вернуть полный путь к tools/nunit3-console.exe в переменную Nunit3Path.
- person dragon788; 15.11.2016
Также вы можете следовать этой инструкции: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit
Сборка выполняется на агенте, поэтому вам необходимо установить NUnit3 на все агенты, на которых вы хотите запустить сборку.
В бегуне TeamCity есть некоторые недостатки, в частности, его поведение по умолчанию заключается в том, чтобы не запускать спецификации в своих собственных доменах приложений с их собственным базовым каталогом, как в NUnit2 (и тестовом адаптере NUnit3 Visual Studio).
В серии сборок TeamCity 9.x есть (в настоящее время недокументированное) свойство конфигурации, которое позволяет вам изменить это поведение. Я писал об этом здесь< /а>.
Попробуйте последнюю версию скрипта @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']"
Также опираясь на ответ @NikolayP:
В настоящее время NuGet поддерживает аргумент командной строки -ExcludeVersion
для операции install
. Из документов:
Устанавливает пакет в папку с именем, содержащим только имя пакета, а не номер версии.
Это приводит к пути, который довольно легко использовать на последующем этапе сборки NUnit runner и позволяет отказаться от умного обходного пути @НатанАлденСр.
Начиная с TeamCity 2017.1.3 (и, возможно, более ранних версий), эта функция даже отображается как параметр для NuGet Installer (см. Параметры восстановления), но требует пути решения. Приведенный ниже пример подходит для универсальной оперативной и временной установки NUnit.
Для простого копирования и вставки (настройте версию NUnit под свои требования):
- Исполняемый файл:
%teamcity.tool.NuGet.CommandLine.DEFAULT%\tools\nuget.exe
- Параметры:
install NUnit.Console -Version 3.7.0 -ExcludeVersion -OutputDirectory %system.teamcity.build.tempDir%\NUnit
Я знаю, что сейчас июль 2018 года, но ни один из этих ответов не был мне ясен. Зачем мне устанавливать консоль на каждом агенте. Там должен быть лучший способ. Когда я добавлял свой шаг сборки для запуска тестов, я заметил, что текст под вводом пути к консольному инструменту NUnit гласил: «Пути относительно каталога проверки поддерживаются». Все, что я сделал, это добавил пакеты nuget в свой тестовый проект в моем решении. Я добавил версию NUnit v3.10.1, а затем версию NUnit.Console v3.8.0. Затем в Team City я просто добавил относительный путь "packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe"
NUnit.Console
, вы можете использовать его, и вам не нужно устанавливать его отдельно. С другой стороны, я предпочитаю не устанавливать пакеты, которые не нужны для сборки и запуска тестов на компьютере разработчика, и по возможности сохранять детали, относящиеся к машине сборки, вне файлов проекта. С этим ответом это возможно без лишних слов.
- person CodeFox; 21.03.2019