你怎么跑从詹金斯NUnit的测试?你怎么跑从詹金斯NUnit的测试?(How do you run

2019-05-13 10:00发布

我期待运行C#应用程序的自动化测试的NUnit,夜间和每次提交到svn的。

这是一些詹金斯-CI可以做什么?
是否有一个在线教程或如何对文件,其中记录了类似的设置,我可以看看?

Answer 1:

我需要做的正是你做什么,这是我的设置詹金斯如何做到这一点:

  1. 添加NUnit的插件詹金斯
  2. 在项目转到配置 - > 构建 - > 添加构建步骤
  3. 在下拉向下滚动到- > 执行Windows批处理命令
  4. 确保这一步放在你的MSBuild步骤之后
  5. 添加以下,替换变量:

单个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

  1. 生成后操作 ,勾选发布NUnit的测试结果报告
  2. 对于文本框测试报告个XML输入NUnit的,为result.xml

一旦你的项目已经建成,NUnit现在运行,其结果将是在仪表盘查看或者(如果你将鼠标悬停在天气报告图标),或在最后一次测试结果的项目页面上。

你也可以在Visual Studio中或作为您当地的构建过程的一部分运行的命令。

下面是我用两个参考的博客文章。 我没有找到任何安装我的要求正是:
1小时指南持续集成设置:詹金斯遇到的.Net (2011)
引导建设使用哈德森.NET项目 (2008年)



Answer 2:

如果你不想硬编码单元测试项目,你是断写一个脚本来获取您的所有单元测试项目的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"


Answer 3:

对于NUnit的3或以上farmework:

  1. 构建步骤(Windows命令行) "c:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" c:\AutomationTraining\CSharpSelenium\bin\Debug\test.dll --result=TestR.xml;format=nunit2

  2. 对于NUnit的报告发布后一步,它表明在詹金斯的工作空间目录仅测试结果文件,而不是在你的项目中:TestR.xml

我们需要在nunit2格式的测试结果,因为现在詹金斯NUnit的插件不承认Nunit3结果格式。 也选项字符串格式不同的是: --result=TestR.xml;format=nunit2 NOT /xml=nunit-result.xml



Answer 4:

这工作得很好,我以前设置此。

配置NUnit的将结果输出到一个XML文件,并配置了NUnit的詹金斯插件消费这个XML文件。 研究结果将可以在仪表盘上。

现在,你如何调用NUnit的是你。 我们所采取的方式是:詹金斯作业执行楠目标执行NUnit测试套件。

您可以配置詹金斯作业运行在提交和/或安排在一定的时间。



Answer 5:

拉夫Willgoss该解决方案的工作很好,但我改变了两两件事,使之伟大:

A)我用NUnit的项目,而不是直接的DLL文件。 这使得它更容易地添加更多的组件或配置在NUnit的GUI测试。

b)本人增加了一个线到批料中,以防止从构建在测试失败时失败:

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

NUnit的插件自动提到标记构建不稳定 ,这是正是我想要的,只要测试失败。 它显示一个黄点。



Answer 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/



Answer 7:

詹金斯确实有将支持插件。 具体的配置将取决于你的项目设置了不少。 有通过查看插件页面NUnit的,MSBuild的,南特等开始具体的插件,但它不应该是非常难以弄清楚。



Answer 8:

这是我对詹金斯运行与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)执行。



文章来源: How do you run NUnit tests from Jenkins?