TeamIn中的NUnit结果文件

时间:2013-09-03 09:15:22

标签: nunit teamcity

使用TeamCity 8,如何为NUnit运行生成/查找结果文件?

我们目前还运行产生TRX文件的MsTest。然后,我们使用TRX-> HTML报告工具将报告传递到管理食物链。我们如何在TeamCity中对NUnit做同样的事情?

现在我认为我需要将NUnit作为CommandLine构建步骤执行,但考虑到有一个NUnit加载项并且MsTest加载项为我提供了“结果文件:”选项,这似乎很疯狂

2 个答案:

答案 0 :(得分:5)

TeamCity以不同方式执行MSTest和NUnit。

NUnit不是通过NUnit控制台可执行文件运行,而是通过TeamCity自己的NUnit运行程序运行。这允许TeamCity即时报告NUnit测试结果 - 执行测试3 ... 4 ... 5 ... 78 - 并允许即时通知失败的测试,即使所有测试尚未执行。 / p> 另一方面,MSTest直接通过MSTest可执行文件,并且没有实时报告。除了"进展中没有进展"。测试结果(包括任何故障)仅在每次测试运行后报告。

TeamCity需要并解析MSTest TRX文件以执行自己的报告,包括任何失败,因此它也可供您使用。但是,NUnit报告文件是NUnit控制台的一部分,而不是TeamCity运行程序的一部分,因此没有要提供的报告文件。

如果需要报告文件,则需要通过NUnit控制台运行NUnit测试。有several ways这样做,其中只有一个使用命令行步骤。但请注意,无论您使用哪种替代方案,都会失去即时报告。

答案 1 :(得分:3)

杰伊的描述是正确的;这是TeamCity的行为,使得这项任务无法开箱即用。

虽然有一个已知的解决方法:

http://devnet.jetbrains.com/message/5218450#5218450

基本上,您手动调用TeamCity NUnit运行器(例如,从MSBuild)。然后,运行器可以输出result.xml文件(每个测试程序集一个)。然后必须将这些结果文件合并为一个,以模拟nunit-console的行为。

Davy Brion甚至为此发布了MSBuild任务:

http://web.archive.org/web/20080808215345/http://davybrion.com/blog/2008/07/using-teamcitys-nunit-support-while-keeping-the-output-around/

http://web.archive.org/web/20080809002009/http://davybrion.com/blog/stuff/

从那以后,他已经开始了他的博客,所以我还要回避这个问题。如果这些链接也死掉了,这里有一些片段:

  

NUnitMergeOutput

     

此任务将多个NUnit xml报告的输出合并为一个组合的xml报告   合并后的报告将包含提供给它的每个xml报告的结果,它包含整个测试运行的测试,故障,持续时间和总体成功状态的总数。

     

定义任务:

<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\Libs\Brion.MSBuildTasks\Brion.MSBuildTasks.dll"
           TaskName="NUnitMergeOutput"/>
     

并在目标中使用它:

<CreateItem Include="TestResults\*.xml" >
  <Output TaskParameter="Include" ItemName="NUnitOutputXmlFiles"/>
</CreateItem>

<NUnitMergeOutput NUnitOutputXmlFiles="@(NUnitOutputXmlFiles)"
                  PathOfMergedXmlFile="TestResults\TestResults.xml" /> 
     

BuildTeamCityNUnitArguments

     

TeamCity不允许您在构建之后保持NUnit输出xml文件的同时启用其集成的NUnit测试支持。此任务准备一个xml参数文件以传递给TeamCity的NUnitLauncher任务,该任务可以将NUnit输出xml保存在您可以指定的目录中。您可以在此处找到有关此问题的更多信息,以及有关此解决方法的更多信息。

     

定义任务:

<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\Libs\Brion.MSBuildTasks\Brion.MSBuildTasks.dll"
        TaskName="BuildTeamCityNUnitArguments"/>
     

并在目标中使用它:

<CreateItem Include="**\Bin\Debug\*Tests*.dll" >
  <Output TaskParameter="Include" ItemName="TestAssemblies" />
</CreateItem>

<BuildTeamCityNUnitArguments HaltOnError="true" HaltOnFirstTestFailure="true"
                            HaltOnFailureAtEnd="true" TestAssemblies="@(TestAssemblies)"
                            NUnitResultsOutputFolder="TestResults"
                            PathOfNUnitArgumentsXmlFile="nunitarguments.xml" />


<Exec Command="$(teamcity_dotnet_nunitlauncher) @@ nunitarguments.xml" />