111 votes

Comment voulez-vous exécuter des tests NUnit de Jenkins?

Je suis à la recherche d'exécution automatisée de tests NUnit pour une application en C#, tous les soirs, et sur chaque commit svn.

Est-ce quelque chose que Jenkins-CI peut faire?
Est-il un tutoriel en ligne ou document documents similaires configuration que je peux regarder?

123voto

Ralph Willgoss Points 3452

J'avais besoin de faire exactement ce que vous faites, voici comment je peux configurer Jenkins pour ce faire:

  1. Ajouter le NUnit Plugin Jenkins
  2. Dans votre projet aller à Configurer -> Build -> Ajouter une étape de génération
  3. Dans le menu déroulant, faites défiler jusqu'à -> Exécuter Windows Commande de traitement par Lots
  4. S'assurer que cette étape est placé après votre MSBuild étape
  5. Ajouter la suivante, en remplaçant les variables:

Dll unique test:

[PathToNUnit]\bin\nunit-console.exe [PathToTestDll]\Selenium.Tests.dll /xml=nunit-result.xml

Plusieurs dll test à l'aide de NUnit projets de test:

[PathToNUnit]\bin\nunit-console.exe [PathToTests]\Sélénium.Les Tests.nunit /xml=nunit-result.xml

  1. En vertu de l'après-construire des Actions, cochez Publier NUnit rapport de résultat d'essai
  2. Pour la zone de texte rapport de Test XMLs, entrez nunit-result.xml

Une fois que votre projet a été construit, NUNit va maintenant exécuter, et les résultats seront visibles sur le tableau de bord(si vous passez la souris sur la Météo icône de rapport) ou sur la page du projet en vertu de Dernier Résultat de Test.

Vous pouvez également exécuter la commande à partir de Visual Studio ou dans le cadre de votre processus de build.

Voici deux articles de blog que j'ai utilisé pour référence. Je n'ai pas trouvé qui correspondait exactement à mes exigences:
1 Heure de Guide pour l'Intégration Continue de l'Installation: Jenkins rencontre .Net (2011)
Guide de construction .NET de projets à l'aide d'Hudson (2008)

17voto

Daniel McQuiston Points 346

Si vous ne voulez pas coder en dur votre de test de l'unité de projets, vous êtes mieux d'écrire un script pour saisir l'ensemble de votre projet de Test d'Unité de la dll. Nous le faisons avec Powershell et de suivre une convention spécifique pour nommer notre Unité de Test des Projets. Voici le contenu de la powershell de fichiers qui s'exécute nos tests unitaires:

param(
[string] $sourceDirectory = $env:WORKSPACE
, $fileFilters = @("*.UnitTests.dll", "*_UnitTests.dll", "*UnitTests.dll")
, [string]$filterText = "*\bin\Debug*"
)

#script that executes all unit tests available.
$nUnitLog = Join-Path $sourceDirectory "UnitTestResults.txt"
$nUnitErrorLog = Join-Path $sourceDirectory "UnitTestErrors.txt"

Write-Host "Source: $sourceDirectory"
Write-Host "NUnit Results: $nUnitLog"
Write-Host "NUnit Error Log: $nUnitErrorLog"
Write-Host "File Filters: $fileFilters"
Write-Host "Filter Text: $filterText"

$cFiles = ""
$nUnitExecutable = "C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console-x86.exe"

# look through all subdirectories of the source folder and get any unit test assemblies. To avoid duplicates, only use the assemblies in the Debug folder
[array]$files = get-childitem $sourceDirectory -include $fileFilters -recurse | select -expand FullName | where {$_ -like $filterText}

foreach ($file in $files)
{
    $cFiles = $cFiles + $file + " "
}

# set all arguments and execute the unit console
$argumentList = @("$cFiles", "/framework:net-4.5", "/xml=UnitTestResults.xml")

$unitTestProcess = start-process -filepath $nUnitExecutable -argumentlist $argumentList -wait -nonewwindow -passthru -RedirectStandardOutput $nUnitLog -RedirectStandardError $nUnitErrorLog

if ($unitTestProcess.ExitCode -ne 0)
{
    "Unit Test Process Exit Code: " + $unitTestProcess.ExitCode
    "See $nUnitLog for more information or $nUnitErrorLog for any possible errors."
    "Errors from NUnit Log File ($nUnitLog):"
    Get-Content $nUnitLog | Write-Host
}

$exitCode = $unitTestProcess.ExitCode

exit $exitCode

Le script est suffisamment robuste que nous sommes en réutilisant pour tous nos travaux. Si vous n'aimez pas le chemin d'accès complet à NUnit de la console, vous pouvez toujours mettre ce lieu dans votre variable d'environnement PATH.

Ensuite, nous avons mis le RunUnitTests.ps1 fichier sur notre serveur de build et d'utiliser cette commande:

powershell.exe -file "{full-path-to-script-direcory}\RunUnitTests.ps1"

8voto

jglouie Points 5506

Cela fonctionne très bien, j'ai mis cela en place avant.

Configurer NUnit en sortie les résultats dans un fichier XML et de configurer le NUnit Jenkins Plugin pour consommer ce fichier XML. Les résultats seront disponibles sur le tableau de bord.

Maintenant, comment vous appelez NUnit est à vous. Comme nous l'avons fait, c'était: Jenkins travail s'exécute NAnt cible exécute NUnit suite de tests.

Vous pouvez configurer Jenkins exécution de travaux sur les commettre et/ou programmées, à un certain moment.

4voto

JCH2k Points 170

La solution de Ralph Willgoss fonctionne bien, mais j'ai changé 2 choses pour en faire une grande:

a) j'ai utilisé un NUnit projet au lieu de le fichier DLL directement. De ce fait, il est plus facile d'ajouter plus d'assemblées ou de configurer le test NUnit GUI.

b) j'ai ajouté une ligne pour le lot pour prévenir l'accumulation de échoue lorsqu'un test échoue:

[PathToNUnit]\bin\nunit-console.exe [PathToTestProject]\UnitTests.nunit /xml=nunit-result.xm
exit 0

Le NUnit Plugin mentionné marque le build INSTABLE automatiquement, ce qui est exactement ce que je veux, à chaque fois qu'un test échoue. Il montre avec un point jaune.

2voto

Akira Yamamoto Points 982

Je pense que c'est mieux à l'échec de la construction lorsqu'il ne passe pas, donc vous n'avez pas le déployer. Faire quelque chose comme ceci:

C:\YourNUnitDir\nunit-console.exe C:\YourOutDir\YourLib.dll /noshadow
if defined ERRORLEVEL if %ERRORLEVEL% neq 0 goto fail_build

:: any other command

: fail_build
endlocal
exit %ERRORLEVEL%

Référence: http://www.greengingerwine.com/index.php/2013/01/tip-check-errorlevel-in-your-post-build-steps-when-using-nunit/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X