我期待运行C#应用程序的自动化测试的NUnit,夜间和每次提交到svn的。
这是一些詹金斯-CI可以做什么?
是否有一个在线教程或如何对文件,其中记录了类似的设置,我可以看看?
我期待运行C#应用程序的自动化测试的NUnit,夜间和每次提交到svn的。
这是一些詹金斯-CI可以做什么?
是否有一个在线教程或如何对文件,其中记录了类似的设置,我可以看看?
我需要做的正是你做什么,这是我的设置詹金斯如何做到这一点:
单个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现在运行,其结果将是在仪表盘查看或者(如果你将鼠标悬停在天气报告图标),或在最后一次测试结果的项目页面上。
你也可以在Visual Studio中或作为您当地的构建过程的一部分运行的命令。
下面是我用两个参考的博客文章。 我没有找到任何安装我的要求正是:
1小时指南持续集成设置:詹金斯遇到的.Net (2011)
引导建设使用哈德森.NET项目 (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或以上farmework:
构建步骤(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的报告发布后一步,它表明在詹金斯的工作空间目录仅测试结果文件,而不是在你的项目中:TestR.xml
我们需要在nunit2格式的测试结果,因为现在詹金斯NUnit的插件不承认Nunit3结果格式。 也选项字符串格式不同的是: --result=TestR.xml;format=nunit2
NOT /xml=nunit-result.xml
这工作得很好,我以前设置此。
配置NUnit的将结果输出到一个XML文件,并配置了NUnit的詹金斯插件消费这个XML文件。 研究结果将可以在仪表盘上。
现在,你如何调用NUnit的是你。 我们所采取的方式是:詹金斯作业执行楠目标执行NUnit测试套件。
您可以配置詹金斯作业运行在提交和/或安排在一定的时间。
拉夫Willgoss该解决方案的工作很好,但我改变了两两件事,使之伟大:
A)我用NUnit的项目,而不是直接的DLL文件。 这使得它更容易地添加更多的组件或配置在NUnit的GUI测试。
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%
参考: http://www.greengingerwine.com/index.php/2013/01/tip-check-errorlevel-in-your-post-build-steps-when-using-nunit/
詹金斯确实有将支持插件。 具体的配置将取决于你的项目设置了不少。 有通过查看插件页面NUnit的,MSBuild的,南特等开始具体的插件,但它不应该是非常难以弄清楚。
这是我对詹金斯运行与vstest OpenCover的解决方案:
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是在自己的过程,因为我们有很多麻烦在一个procress执行所有测试的DLL(带集加载probmels)执行。