2016-04-06 18 views
0

最近、JenkinsビルドサーバーでC#プロジェクトをビルドし始めました。JenkinsでNUnitテストが失敗する(nunit xml結果ファイルが空です)

しかし、最近、私は報告のNUnit XMLが空であるという問題があった(ファイルが作成されますが、コンテンツがありません。)

Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information [WARNINGS] Parsing warnings in console log with parser MSBuild [WARNINGS] Computing warning deltas based on reference build #288 Recording NUnit tests results ERROR: Step ‘Publish NUnit test result report’ aborted due to exception: hudson.util.IOException2: Could not transform the NUnit report. Please report this issue to the plugin author at 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

を次のように

コンソール出力は、私は、問題があることを知っていますおそらくリークされたファイル記述子が、私は本当にそれを修正する方法はわかりません。スクリプトはジェンキンス

#を介して実行された場合

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 

この問題が起こる:

PowerShellスクリプトに必要なすべてのDLLをつかむ

NUnitのテストは、PowerShellスクリプトで実行され、 ############ UPDATE

いくつかの調査の後、私は彼がwpf conで1つのテストケースを追加したときにしか起こらないことを知りましたトロールはUIスレッド上で呼び出すことで作成されます。

 [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:

 /// <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要素はジェンキンスに

await Application.Current.Dispatcher.BeginInvoke(new Action(() => AvailablePluginControls.Add((APControl)Activator.CreateInstance(item))),null); 
+0

jenkinsに特定のディレクトリにファイルを書き込む権限がありますか? – Vitalliuss

+0

はい、ファイル自体は作成されますが、内容はありません。 – Markus

答えて

0

問題がありました。 powershellの開始プロセスは、プロセスが終了するまで待機しません。これにより、子プロセスが終了しないという問題が発生します。

開始プロセスがプロセスが終了するまで待機するには、フラグ-Waitを追加する必要があります。

-1

NUnitのプラグインを作成しているがNUnitの3 XML形式をサポートしません。私はジェンキンズにも同様の問題があります。私はNunit 3の結果形式をNunit 2形式に変換していました。

単体テストはPowerShellスクリプトを介して実行される:以下のように

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

+0

あなたの答えをフォーマットしてください –

関連する問題