TeamCity 9.1.x prend désormais en charge NUnit 3.0, mais vous devez installer le coureur et spécifier le chemin d'accès à nunit3.console.exe à l'étape. Ma question est où puis-je copier le nunit3-console.exe? Dois-je mettre cela sur tous les agents? Est-ce que je le mets dans un répertoire de mon serveur principal TeamCity et il sera partagé ou tiré par les agents? Il ne semble pas y avoir de bonne documentation sur l'endroit où copier ces fichiers afin que tous les agents puissent les utiliser.
Vous devez disposer de la console NUnit sur chaque agent sur lequel vous souhaitez exécuter les tests NUnit.
La meilleure option est:
Ajoutez une référence au paquet NuGet ( https://www.nuget.org/packages/NUnit.Runners/ ).
Pour restaurer le paquet, vous pouvez utiliser l'étape de compilation "NuGet Installer", voir l'article suivant: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
Après cela, il vous suffit de définir un chemin tel que "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" à partir du package NuGet restauré.
S'appuyant sur la réponse de @ NikolayP:
- Ajoutez une référence au paquet NuGet ( https://www.nuget.org/packages/NUnit.Runners/ ).
- Pour restaurer le paquet, vous pouvez utiliser l'étape de compilation "NuGet Installer", voir l'article suivant: https://blog.jetbrains.com/teamcity/2013/08/nuget-package-restore-with-teamcity/
- Après cela, il vous suffit de définir un chemin tel que "packages\NUnit.Console.3.0.0\tools\nunit3-console.exe" à partir du package NuGet restauré.
J'ai écrit le script PowerShell suivant pour déterminer le répertoire de package NUnit.ConsoleRunner correct et remplir une variable TeamCity avant l'exécution de la tâche NUnit. Il utilise la version la plus récente du package 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']"
Notez que vous devez définir la variable src.directory
pour qu'elle pointe vers le répertoire qui contient le répertoire packages
sur votre agent de génération, ou indiquez le répertoire racine nécessaire au bon fonctionnement du script PowerShell. Vous devrez également définir la variable nunit.consolerunner.directory
avec une valeur par défaut vide.
Le script lève également une exception si, pour une raison quelconque, un répertoire NUnit.ConsoleRunner est introuvable.
Vous pouvez également suivre ces instructions: https://confluence.jetbrains.com/display/TCD9/Getting+Started+with+NUnit
La génération étant exécutée sur un agent, vous devez donc installer NUnit3 sur tous les agents sur lesquels vous souhaitez exécuter une génération.
Le coureur de TeamCity a quelques pièges. En particulier, son comportement par défaut est de ne pas exécuter les spécifications dans leur propre AppDomains avec leur propre répertoire de base, comme décrit dans NUnit2 (et l'adaptateur de test NUnit3 Visual Studio).
Il existe une propriété de configuration (actuellement non documentée) dans la série de constructions de TeamCity 9.x qui vous permet de modifier ce comportement. J'ai écrit à ce sujet ici .
Essayez la dernière version du script @NathanAldenSr
Variable toujours requise http: //teamcityserver/admin/editProject.html? ProjectId = yourId & tab = projectParams Add nunit.consolerunner.directory paramètre aux paramètres de configuration
$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']"
Je sais que nous sommes en juillet 2018, mais aucune de ces réponses n'était claire pour moi. Pourquoi dois-je installer une console sur chaque agent? Il doit y avoir une meilleure façon. Lors de l'ajout de mon étape de construction pour l'exécution des tests, j'ai remarqué que le texte situé sous l'entrée du chemin d'accès à l'outil de la console NUnit disait: "Les chemins d'accès relatifs au répertoire de paiement sont pris en charge". Tout ce que je faisais a été ajouté aux paquets de pépites à mon projet de test dans ma solution. J'ai ajouté la version NUnit v3.10.1, puis NUnit.Console v3.8.0. Ensuite, dans Team City, j'ai simplement ajouté le chemin relatif "packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe"
S'appuyant également sur la réponse de @ NikolayP:
NuGet prend actuellement en charge l'argument de ligne de commande -ExcludeVersion
pour l'opération install
. De la docs :
Installe le package dans un dossier portant uniquement le nom du package et pas le numéro de version.
Cela donne un chemin assez facile à utiliser dans une étape ultérieure de la construction du coureur NUnit et permet de supprimer la solution de contournement clever de @NathanAldenSr.
À partir de TeamCity 2017.1.3 (et probablement des versions antérieures), cette fonctionnalité est même exposée en tant que paramètre pour le runner NuGet Installer (voir les Options de restauration).