web-dev-qa-db-ja.com

TeamCity 9.xにnUnit 3 nunit3-console.exeをインストールする方法

NUnit 3.0はTeamCity 9.1.xでサポートされるようになりましたが、ランナーをインストールし、手順でnunit3.console.exeへのパスを指定する必要があります。私の質問は、nunit3-console.exeをどこにコピーすればよいですか?これをすべてのエージェントに配置する必要がありますか?メインのTeamCityサーバー上のディレクトリに配置すると、エージェントによって共有またはプルされますか?すべてのエージェントがそれらを使用できるように、これらのファイルをどこにコピーするかについての適切なドキュメントはないようです。

17
Brett Mathe

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. その後、復元したNuGetパッケージから "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe"のようなパスを設定するだけです。

28
NikolayP

@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. その後、復元したNuGetパッケージから "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe"のようなパスを設定するだけです。

次のPowerShellスクリプトを作成して、正しいNUnit.ConsoleRunnerパッケージディレクトリを特定し、NUnitタスクが実行される前にTeamCity変数を設定しました。 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']"

ビルドエージェントのpackagesディレクトリを含むディレクトリを指すようにsrc.directory変数を定義するか、PowerShellスクリプトが機能するために必要なルートディレクトリを提供する必要があることに注意してください。空のデフォルト値でnunit.consolerunner.directory変数を定義する必要もあります。

なんらかの理由でNUnit.ConsoleRunnerディレクトリが見つからなかった場合も、スクリプトは例外をスローします。

7
NathanAldenSr

また、この指示に従うこともできます: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit

5
NikolayP

ビルドはエージェントで実行されているため、ビルドを実行するすべてのエージェントにNUnit3をインストールする必要があります。

2
Pavel Sher

TeamCityランナーにはいくつかの落とし穴があります。具体的には、デフォルトの動作は、NUnit2(およびNUnit3 Visual Studioテストアダプター)のように、独自のベースディレクトリを持つ独自のAppDomainで仕様を実行することではありません。

TeamCity 9.xビルドシリーズには、(現在文書化されていない)構成プロパティがあり、この動作を変更できます。 ここで書きました

2
Matthew Adams

スクリプト@NathanAldenSrの最新バージョンをお試しください

それでも必要な変数 http://teamcityserver/admin/editProject.html?projectId = yourId&tab = projectParams addnunit.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']"
2
RouR

また、@ NikolayPの答えに基づいて構築します。

NuGetは現在、install操作のコマンドライン引数-ExcludeVersionをサポートしています。 docs から:

バージョン番号ではなく、パッケージ名のみで指定されたフォルダーにパッケージをインストールします。

これにより、後続のNUnitランナービルドステップでかなり使いやすいパスが得られ、@ NathanAldenSrの 賢い回避策 を削除できます。

TeamCity 2017.1.3(およびおそらく以前のバージョン)では、この機能はNuGet Installerのパラメーターとして公開されています。ランナー(復元オプションを参照))が、ソリューションパスが必要です。以下の例は、一般的なオンザフライで一時的なNUnitのインストールに適しています。

screenshot of example build step

コピーと貼り付けを簡単にするには(NUnitバージョンを要件に合わせて調整します):

  • 実行可能ファイル:%teamcity.tool.NuGet.CommandLine.DEFAULT%\tools\nuget.exe
  • パラメータ:install NUnit.Console -Version 3.7.0 -ExcludeVersion -OutputDirectory %system.teamcity.build.tempDir%\NUnit
2
CodeFox

2018年7月になりましたが、これらの答えはどれもわかりませんでした。各エージェントにコンソールをインストールする必要があるのはなぜですか。もっと良い方法があるはずです。テストを実行するためのビルドステップを追加しているときに、NUnitコンソールツールへのパスの入力の下のテキストに、「チェックアウトディレクトリに対する相対パスがサポートされている」と表示されていることに気付きました。私が行ったのは、ソリューションのテストプロジェクトにnugetパッケージを追加することだけです。 NUnitバージョンv3.10.1を追加してから、NUnit.Console v3.8.0を追加しました。次に、Team Cityで相対パス「packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe」を追加しました

0
Kirby