Как вы запускаете тесты NUnit от Дженкинса?
Я ищу, чтобы запустить автоматические тесты NUnit для приложения C#, каждую ночь и на каждом коммите в svn.
Это то, что Дженкинс-КИ можно сделать?
Есть ли онлайн-учебник или как документировать, какие документы аналогичной настройки, которые я могу посмотреть?
8 ответов:
Мне нужно было сделать именно то, что вы делаете, вот как я настроил Дженкинса для этого:
- добавьте плагин NUnit в Jenkins
- в вашем проекте перейдите к настроить ->построить ->добавить шаг сборки
- в выпадающем списке прокрутите вниз до ->Выполнить Пакетную Команду Windows
- убедитесь, что этот шаг размещен после вашего шага MSBuild
- добавить следующее, заменив переменные:
один тест dll:
[PathToNUnit]\bin\nunit-консоль.exe [PathToTestDll]\Selenium.Тесты.файл DLL /xml=nunit-результат.xml
несколько dll тест с помощью тестовые проекты NUnit:
[PathToNUnit]\bin\nunit-консоль.exe [PathToTests]\Selenium.Тесты.нанит /xml=nunit-результат.xml
- под после построения Действия, клещевой опубликовать отчет о результатах теста NUnit
- для текстового поля отчет по испытанию XMLs введите нанит-результат.xml
Как только вы построите проект, NUNit теперь будет запущен, и результаты будут видны либо на панели мониторинга (если вы наведете курсор на значок отчета о погоде), либо на странице проекта под Последний Результат Теста.
вы также можете запустить команду из Visual Studio или как часть вашего локального процесса сборки.
вот два сообщения в блоге, которые я использовал для справки. Я не нашел ничего, что точно соответствовало моим требованиям:
1-часовое руководство по установке непрерывной интеграции: Дженкинс встречает .Net (2011)
руководство по созданию проектов .NET с использованием Hudson (2008)
Если вы не хотите жестко кодировать свои проекты модульного тестирования, вам лучше написать сценарий, чтобы захватить все ваши dll-файлы проекта модульного тестирования. мы делаем это с помощью Powershell и следуем определенному соглашению для именования наших проектов модульного тестирования. Вот содержимое файла PowerShell, который запускает наши тесты:
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
скрипт достаточно надежен, что мы повторно используем для всех наших заданий сборки. Если вам не нравится полный путь к консоли NUnit, вы всегда можете поместить это место в переменной среды PATH.
затем мы помещаем файл RunUnitTests. ps1 на наш сервер сборки и используем эту командную команду:
powershell.exe -file "{full-path-to-script-direcory}\RunUnitTests.ps1"
для Nunit 3 или выше сельскохозяйственных работ:
шаг построения (командная строка Windows)
"c:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" c:\AutomationTraining\CSharpSelenium\bin\Debug\test.dll --result=TestR.xml;format=nunit2
Post шаг для публикации отчета Nunit, он показывает только файл результатов тестирования в каталоге Jenkins workspace, а не в вашем проекте: TestR.xml
нам нужно сделать результаты теста в формате nunit2, потому что теперь плагин Jenkins Nunit не распознает формат результатов Nunit3. Также параметры строкового формата отличающийся:
--result=TestR.xml;format=nunit2
НЕ/xml=nunit-result.xml
Это прекрасно работает, я уже настраивал это раньше.
настроить NUnit для вывода результатов в XML-файл и настроить Плагин NUnit Jenkins чтобы использовать этот XML-файл. Результаты будут доступны на панели мониторинга.
теперь, как вы вызываете NUnit зависит от вас. Так же было: Дженкинс задания целевые Нант выполняет Нанит тестов.
вы можете настроить задания Jenkins для запуска при фиксации и / или по расписанию в определенном месте время.
решение от Ralph Willgoss работает хорошо, но я изменил 2 вещи, чтобы сделать его большим:
a) я использовал проект NUnit вместо DLL-файла напрямую. Это упрощает добавление дополнительных сборок или настройку теста в графическом интерфейсе NUnit.
b) я добавил еще одну строку в пакет, чтобы предотвратить сбой сборки при сбое теста:
[PathToNUnit]\bin\nunit-console.exe [PathToTestProject]\UnitTests.nunit /xml=nunit-result.xm exit 0
упомянутый плагин NUnit отмечает сборку нестабильная автоматически, что именно то, что я хочу, когда тест завершается неудачей. Он показывает с желтой точкой.
Я думаю, что лучше провалить сборку, когда она не проходит, поэтому вы не развертываете ее. Сделать что-то вроде этого:
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%
у Дженкинса есть плагины, которые будут поддерживать это. Точная конфигурация будет зависеть совсем немного от настройки вашего проекта. Существуют специальные плагины для nUnit, MSBuild, nAnt и др. Начните с просмотра страницы плагинов, но это не должно быть ужасно трудно понять.
Это мое решение для запуска OpenCover С vstest в Jenkins:
param( [string] $sourceDirectory = $env:WORKSPACE , $includedFiles = @("*Test.dll") , $excludedFiles = @("*.IGNORE.dll") , [string]$filterFolder = "*\bin\Debug*" ) # Executables $openCoverExecutable = "C:\Users\tfsbuild\AppData\Local\Apps\OpenCover\OpenCover.Console.exe" $unitExecutable = "F:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" # Logs $openCoverReport = Join-Path $sourceDirectory "opencover.xml" $openCoverFilter = "+[*]* -[*Test]*" Write-Host "`r`n==== Configuration for executing tests ====" Write-Host "Source: `"$sourceDirectory`"" Write-Host "Included files: `"$includedFiles`"" Write-Host "Excluded files: `"$excludedFiles`"" Write-Host "Folder filter: `"$filterFolder`"" Write-Host "" Write-Host "OpenCover Report: `"$openCoverReport`"" Write-Host "OpenCover filter: `"$openCoverFilter`"" # 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 $includedFiles -exclude $excludedFiles -recurse | select -expand FullName | where {$_ -like $filterFolder} | Resolve-Path -Relative $exitCode = 0 $failedTestDlls = "" foreach ($file in $files) { Write-Host "`r`nCurrent test dll: $file" # set all arguments and execute OpenCover $argumentList = @("-target:`"$unitExecutable`"", "-targetargs:`"$file /UseVsixExtensions:false /Logger:trx`"", "-register:user -filter:`"$openCoverFilter`" -mergeoutput -mergebyhash -skipautoprops -returntargetcode -output:`"$openCoverReport`"") $unitTestProcess = start-process -filepath $openCoverExecutable -argumentlist $argumentList -wait -nonewwindow -passthru -WorkingDirectory $sourceDirectory if ($unitTestProcess.ExitCode -ne 0) { $failedTestDlls = $failedTestDlls + $file + "`r`n" $exitCode = $unitTestProcess.ExitCode } } if ($exitCode -ne 0) { Write-Host "`r`n==== Executing tests in following dlls failed ====" Write-Host "$failedTestDlls" } exit $exitCode
каждая тестовая dll выполняется в собственном процессе, потому что у нас были проблемы с выполнением всех тестовых DLL в одном процессе (probmels с загрузкой сборки).