Как вы проводите тесты NUnit от Jenkins?
Я ищу, чтобы запускать автоматические тесты NUnit для приложения С#, ночные и для каждой фиксации для svn.
Это то, что может сделать Jenkins-CI?
Есть ли онлайн-учебник или практический документ, который документирует аналогичную установку, на которую я могу смотреть?
Ответы
Ответ 1
Мне нужно было сделать именно то, что вы делаете, вот как я настраиваю Jenkins для этого:
- Добавьте плагин NUnit к Jenkins
- В своем проекте перейдите в Настроить → Сборка → Добавить шаг сборки
- В раскрывающемся списке прокрутите вниз до → Выполняйте командную команду Windows
- Убедитесь, что этот шаг установлен после шага MSBuild.
- Добавьте следующее, заменив переменные:
Проверка одиночной dll:
[PathToNUnit]\bin\nunit-console.exe [PathToTestDll]\Selenium.Tests.dll /xml =nunit-result.xml
Несколько тестов dll с использованием проектов тестирования NUnit:
[PathToNUnit]\bin\nunit-console.exe [PathToTests]\Selenium.Tests.nunit /xml =nunit-result.xml
- В разделе Действия после сборки отметьте Опубликовать отчет о результатах тестирования NUnit
- Для текстового поля Протокол отчета об испытаниях введите nunit-result.xml
После того, как вы построили проект, NUNit теперь будет запущен, и результаты будут доступны для просмотра либо на панели управления (если вы наведете над значком отчета о погоде), либо на странице проекта в разделе Последний результат теста.
Вы также можете запустить эту команду из Visual Studio или как часть вашего локального процесса сборки.
Вот два сообщения в блоге, которые я использовал для справки. Я не нашел то, что соответствовало моим требованиям:
1-часовое руководство по установке непрерывной интеграции: Jenkins отвечает .Net (2011)
Руководство по созданию .NET-проектов с использованием Hudson (2008)
Ответ 2
Если вы не хотите жестко программировать свои проекты unit test, вам лучше написать script, чтобы захватить все ваши DLL проекта unit test. Мы делаем это с 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
script достаточно прост, что мы повторно используем все наши задания сборки. Если вам не нравится полный путь к консоли NUnit, вы всегда можете поместить это местоположение в свою переменную среды PATH.
Затем мы помещаем файл RunUnitTests.ps1 на наш сервер сборки и используем эту командную команду:
powershell.exe -file "{full-path-to-script-direcory}\RunUnitTests.ps1"
Ответ 3
Для 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
-
Шаг сообщения для публикации отчета Nunit, он показывает только файл результатов теста в каталоге рабочего пространства Jenkins, а не в вашем проекте:
TestR.xml
Нам нужно сделать результаты теста в формате nunit2, потому что теперь плагин Jenkins Nunit не распознает формат результатов Nunit3.
Также формат строки опций отличается:
--result=TestR.xml;format=nunit2
НЕ
/xml=nunit-result.xml
Ответ 4
Это хорошо работает, я уже задал это.
Настройте NUnit для вывода результатов в файл XML и настройте NUnit Jenkins Plugin, чтобы использовать этот файл XML, Результаты будут доступны на панели управления.
Теперь, как вы вызываете NUnit, зависит от вас. То, как мы это делали, было:
Задание Jenkins выполняется NAnt target выполняет набор тестов NUnit.
Вы можете настроить задания Jenkins для выполнения в режиме фиксации и/или планирования в определенное время.
Ответ 5
Решение от Ralph Willgoss работает хорошо, но я изменил 2 вещи, чтобы сделать их замечательными:
a) Я использовал проект NUnit вместо DLL файла. Это упрощает добавление дополнительных сборок или настройку теста в графическом интерфейсе NUnit.
b) Я добавил еще одну строку в пакет, чтобы предотвратить сбои сборки при неудачном тесте:
[PathToNUnit]\bin\nunit-console.exe [PathToTestProject]\UnitTests.nunit /xml=nunit-result.xm
exit 0
В плагине NUnit отмечены сборки НЕСТАБИЛЬНАЯ, и это именно то, что я хочу, всякий раз, когда тест терпит неудачу. Он показывает желтую точку.
Ответ 6
Я думаю, что лучше не скомпилировать сборку, когда она не пройдет, поэтому вы ее не развертываете. Сделайте что-то вроде этого:
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%
Ссылка: http://www.greengingerwine.com/index.php/2013/01/tip-check-errorlevel-in-your-post-build-steps-when-using-nunit/
Ответ 7
У Дженкинса есть плагины, которые будут поддерживать это. Точная конфигурация будет немного зависеть от настройки вашего проекта. Существуют специальные плагины для nUnit, MSBuild, nAnt и т.д. Начните с просмотра страницы плагинов, но ее не должно быть трудно найти.
Ответ 8
Это мое решение для запуска 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 выполняется в собственном процессе, потому что у нас возникли проблемы с выполнением всех тестовых библиотек в одном вызове (проблы с загрузкой сборки).
Ответ 9
Для .Net Core достаточно добавить шаг сборки "execute shell" с помощью следующего скрипта:
#!bash -x
cd $my_project_dir
rm -rf TestResults # Remove old test results.
dotnet test -l trx
После этого добавьте действие "Опубликовать отчет о результатах теста MSTest", чтобы результаты теста были видны.
Путь к отчетам о тестах по умолчанию должен быть **/*.trx
и публиковать все созданные файлы .trx
.