首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins失败的NUnit测试(nunit xml结果文件为空)

Jenkins失败的NUnit测试(nunit xml结果文件为空)
EN

Stack Overflow用户
提问于 2016-04-06 08:48:18
回答 2查看 2.2K关注 0票数 0

最近,我开始在Jenkins构建服务器上构建我的C#项目。

但是最近我遇到了一个问题,即报告的NUnit xml是空的(文件是创建的,但没有内容)。

控制台输出如下

进程泄漏的文件描述符。有关更多信息,请参见http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build以解析控制台日志中的警告,解析器MSBuild警告计算基于参考构建#288记录NUnit测试结果错误:由于异常而中止的步骤“发布NUnit测试结果报告”:hudson.util.IOException2:无法转换NUnit报告。请将此问题报告给hudson.plugins.nunit.NUnitArchiver.invoke(NUnitArchiver.java:65) at hudson.plugins.nunit.NUnitArchiver.invoke(NUnitArchiver.java:26) at hudson.FilePath.act(FilePath.java:990) at hudson.FilePath.act(FilePath.java:968) at hudson.plugins.nunit.NUnitPublisher.perform(NUnitPublisher.java:145) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782) at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:723) at hudson.model.Build$BuildExecution.post2(Build.java:185) at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:668

我知道问题可能是泄露的文件描述符,但我不太确定如何解决这个问题。

NUnit测试使用powershell脚本执行,该脚本获取所有必需的dll。

powershell脚本:

代码语言:javascript
复制
param(
[string] $sourceDirectory = "./trunk/TestProjects/"
, $fileFilters = @("*UnitTest*.dll")
, [string]$filterText = "*\bin*"
)

#script that executes all unit tests available.


Write-Host "Source: $sourceDirectory"
Write-Host "File Filters: $fileFilters"
Write-Host "Filter Text: $filterText"

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

# look through all subdirectories of the source folder and get any unit test assemblies. To avoid duplicates, only use the assemblies in the bin 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", "--result=nunit-result.xml;format=nunit2","--framework=net-4.5","--process=Single")

$unitTestProcess = start-process -filepath $nUnitExecutable -argumentlist $argumentList -nonewwindow
echo "$nUnitExecutable $argumentList"


$exitCode = $unitTestProcess.ExitCode

exit $exitCode

此问题仅在脚本通过jenkins执行时才会发生。

#######################UPDATE

经过一些调查后,我发现他只会在我添加一个测试用例时发生,其中wpf控件是通过在UI线程上调用wpf控件来创建的。

代码语言:javascript
复制
        [Test Apartment(ApartmentState.STA) RunInApplicationDomain]
    public void CheckPluginModel()
    {
        var app = Application.Current ?? new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
        PluginModel model = new PluginModel();

        var task= model.LoadPluginsFromPath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));


        RunApplication(() => task.IsCompleted);


        Assert.That(model.AvailablePluginControls.Count, Is.EqualTo(1));
        Assert.That(model.Workflows.Count, Is.EqualTo(1));
        Console.WriteLine("Plugin model check finished");

    }

RunApplication:

代码语言:javascript
复制
        /// <summary>
    /// Runs the application. as long as abortCriteria returns false
    /// </summary>
    /// <param name="abortCriteria">The abort criteria.</param>
    private void RunApplication(Func<bool> abortCriteria, int duetime = 100, int period=100)
    {

        Console.WriteLine("Application started");
        System.Threading.Timer timer = null;
        timer = new Timer((obj) =>
        {
            if (abortCriteria.Invoke())
            {
                Application.Current.Dispatcher.Invoke(() => Application.Current.Shutdown());
                timer.Dispose();

            }
        }, null, duetime, period); 

        Application.Current.Run();

        Console.WriteLine("Application stopped");
    }

创建所有GUI元素

代码语言:javascript
复制
await Application.Current.Dispatcher.BeginInvoke(new Action(() => AvailablePluginControls.Add((APControl)Activator.CreateInstance(item))),null);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-13 10:02:36

问题如下:

单元测试通过powershell脚本执行。powershell启动进程不会等到进程完成。这会导致子进程未完成的问题。

为了让启动进程等到进程完成,必须添加标志-Wait

票数 0
EN

Stack Overflow用户

发布于 2016-12-08 17:42:33

Jenkins中的Nunit插件不支持Nunit 3 xml格式。我在詹金斯身上也有类似的问题。我曾将Nunit 3结果格式转换为Nunit 2格式。

"C:\NUnit 3.5.0\nunit3-console.exe" /result:\MyApplication.xml;format=nunit2 "D:\Jenkins\workspace\MyApplication.Tests.dll"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36445990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档