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

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


person Brett Mathe    schedule 23.11.2015    source источник


Ответы (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.

person NikolayP    schedule 04.12.2015
comment
Мне кажется или это немного смешно? Я тоже пошел по этому пути, не увидев этого ответа, но мне кажется, что когда пакет будет обновлен в решении, люди останутся в недоумении, почему их сборка TC не работает из-за того, что имя версии пакета больше не соответствует дата. - person Tom; 04.08.2016
comment
Я проголосовал за этот ответ, потому что он научил меня тому, что существует пакет NuGet, содержащий бегун. Я устанавливал NUnit непосредственно на свой агент сборки и вместо этого ссылался на этот путь. Однако я согласен с @Tom в том, что жестко закодированный номер версии в пути packages неоптимален; разработчикам придется синхронизировать версию во всех конфигурациях сборки, чтобы жестко заданное имя каталога работало. Возможно, можно настроить отдельный шаг сборки, чтобы определить правильный путь и присвоить его переменной? - person NathanAldenSr; 10.08.2016
comment
@NathanAldenSr Было бы лучше, если бы TC мог автоматически определять последнюю версию запуска консоли в каталоге пакетов, не указывая ничего. Было бы еще лучше, если бы TC мог даже получить последнюю версию из NuGet (если вы не предоставили ее в своем решении) и запустить ее, чтобы разработчикам не нужно было думать о своих требованиях к серверу сборки при размещении проекта. вместе. - person Tom; 10.08.2016
comment
Пакет Nunit.Runners устарел, и вы должны использовать NUnit.ConsoleRunner. Будьте осторожны, чтобы не использовать один из других 10+ пакетов nunit, которые звучат обманчиво похоже, например, NUnit.Console, NUnit.Runners, NUnit.Engine, NUnit.Extension.TeamCityEventListener и т. д. и т. д. Учитывая сам XUnit... это становится немного утомительно просто запускать некоторые модульные тесты. - person JTW; 14.10.2016
comment
@woogy единственный пакет Nunit.Console будет извлекать Nunit.ConsoleRunner и другие биты, хотя вы должны указать путь к Nunit.ConsoleRunner, а НЕ только к Nunit.Console для exe. - person dragon788; 15.11.2016
comment
comment
Команда TeamCity работает над реализацией альтернативного подхода, когда вы можете выбрать версию NUnit для глобального использования на всех агентах (так, как в настоящее время это делается для NuGet). Это устранит любые неудобства, с которыми вы можете столкнуться в данный момент. - person NikolayP; 15.11.2016
comment
@NikolayP есть новости об описанном выше подходе? 2017.1? - person Kralizek; 14.03.2017
comment
Начиная с 2017.1.3 можно устанавливать пакеты в каталог без номера версии (подробнее см. мой ответ) . - person CodeFox; 25.08.2017

Основываясь на ответе @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 не может быть найден.

person NathanAldenSr    schedule 09.08.2016
comment
Спасибо, что вдохновили меня сделать еще один шаг вперед. Обычно проекты MSBuild имеют один файл решения, который необходимо указать с помощью пути в TeamCity. Используя эту существующую переменную и Split-Path, я смог взять информацию, уже требуемую для установки в проекте, определить правильный каталог пакетов и вернуть полный путь к tools/nunit3-console.exe в переменную Nunit3Path. - person dragon788; 15.11.2016
comment
Начиная с 2017.1.3 можно устанавливать пакеты в каталог без номера версии (подробнее см. мой ответ) . - person CodeFox; 25.08.2017

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

person NikolayP    schedule 04.12.2015
comment
Я использовал шаг сборки NUnit для NUnit3, однако TeamCity продолжал добавлять «nunit-console.exe» к любому значению, которое я указал в поле «Путь к загрузчику консоли NUnit», несмотря на то, что в справке говорилось: «Укажите путь к загрузчику консоли NUnit, включая имя файла.' В конце концов я обновился до TeamCity 9.1.6, и проблема, похоже, была исправлена. Я использовал Nuget для получения NUnit Console 3.0.1 и значения пути '%teamcity.build.checkoutDir%\‹my-project-path›\packages\NUnit.Console.3.0.1\tools\nunit3-console.exe' - person Nick Baker; 18.02.2016

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

person Pavel Sher    schedule 03.12.2015
comment
Вам также необходимо добавить путь к консоли nunit в конфигурации сборки TC, например, C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe. Сейчас это кажется неудобным — если я установлю раскрывающийся список на Nunit 3, я ожидаю, что TeamCity сможет самостоятельно связать/разрешить Nunit, как и раньше. Теперь кажется, что это не намного лучше, чем просто включить этап ручной сборки из командной строки, чтобы самостоятельно раскошелиться на Nunit. - person Geoffrey Hudik; 04.12.2015

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

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

person Matthew Adams    schedule 02.02.2016
comment
NUnit runner будет иметь поле Рабочий каталог в TC v10. Рабочий каталог будет равен ApplicationBase AppDomain и будет равен каталогу тестовой сборки, если он не указан. - person NikolayP; 28.04.2016
comment
Так что хотелось бы, чтобы это было в документации jetbrains. Сэкономил бы мне много времени. Спасибо, сэр. - person alt_tab; 08.11.2016

Попробуйте последнюю версию скрипта @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']"
person RouR    schedule 01.02.2017

Также опираясь на ответ @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
person CodeFox    schedule 25.08.2017

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

person Kirby    schedule 30.07.2018
comment
Если в одном из ваших проектов модульного тестирования уже установлен пакет NUnit.Console, вы можете использовать его, и вам не нужно устанавливать его отдельно. С другой стороны, я предпочитаю не устанавливать пакеты, которые не нужны для сборки и запуска тестов на компьютере разработчика, и по возможности сохранять детали, относящиеся к машине сборки, вне файлов проекта. С этим ответом это возможно без лишних слов. - person CodeFox; 21.03.2019