How to install nUnit 3 nunit3-console.exe in TeamCity 9.x

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

NUnit 3.0 is supported by TeamCity 9.1.x now however you have to install the runner and specify the path to the nunit3.console.exe in the step. My question is where do I copy the nunit3-console.exe? Do I have to put this on all the agents? Do I put it in a directory on my main TeamCity server and it will get shared or pulled by the agents? There doesn't seem to be good documentation on where to copy these files so that all the agents can use them.

回答1:

You should have the NUnit console on the each agent where you would like to run NUnit tests.

The best option is:

  1. Add reference to the NuGet package (https://www.nuget.org/packages/NUnit.Runners/).

  2. To restore package you could use "NuGet Installer" build step, see following blog post: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/

  3. After that you just set path like "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" from the restored NuGet package.



回答2:

Building on @NikolayP's answer:

  1. Add reference to the NuGet package (https://www.nuget.org/packages/NUnit.Runners/).
  2. To restore package you could use "NuGet Installer" build step, see following blog post: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
  3. After that you just set path like "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" from the restored NuGet package.

I wrote the following PowerShell script to determine the correct NUnit.ConsoleRunner package directory and populate a TeamCity variable before the NUnit task is run. It uses the most recent version of the NUnit.Console package.

$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']" 

Note that you'll need to define the src.directory variable to point to the directory that contains the packages directory on your build agent, or otherwise supply the necessary root directory for the PowerShell script to work. You'll also need to define the nunit.consolerunner.directory variable with a default value of empty.

The script will also throw an exception if, for whatever reason, an NUnit.ConsoleRunner directory could not be found.



回答3:

Also you could follow this instruction: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit



回答4:

Build is running on an agent, so you need to install NUnit3 on all of the agents where you want to run a build.



回答5:

There are some gotchas around the TeamCity runner - specifically, its default behaviour is not to run the specs in their own AppDomains with their own base directory, as per NUnit2 (and the NUnit3 Visual Studio Test Adapter).

There is a (currently undocumented) configuration property in the TeamCity 9.x build series that enables you to change this behaviour. I've written about it here.



回答6:

Try latest version of script @NathanAldenSr

Still required variable http://teamcityserver/admin/editProject.html?projectId=yourId&tab=projectParams add nunit.consolerunner.directory parameter to Configuration Parameters

$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:

Also building on @NikolayP's answer:

NuGet currently supports the command line argument -ExcludeVersion for the install operation. From the docs:

Installs the package to a folder named with only the package name and not the version number.

This results in a path that is rather easy to use in a subsequent NUnit runner build step and allows to drop the clever workaround of @NathanAldenSr.

As of TeamCity 2017.1.3 (and probably earlier versions), this feature is even exposed as a parameter for the NuGet Installer runner (see the Restore Options).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!