团队城市中的NUnit结果文件

团队城市中的NUnit结果文件,nunit,teamcity,Nunit,Teamcity,使用TeamCity 8,如何生成/查找NUnit运行的结果文件 我们目前还运行MsTest,它生成一个TRX文件。然后,我们使用TRX->HTML报告工具将报告传递给管理食物链。我们如何在TeamCity对NUnit进行同样的处理 现在我想我需要执行NUnit作为命令行构建步骤,但考虑到有一个NUnit外接程序,MsTest外接程序为我提供了一个“结果文件:”选项,TeamCity以不同的方式执行MsTest和NUnit,这似乎很疯狂 NUnit不是通过NUnit控制台可执行文件运行的,而是通

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

我们目前还运行MsTest,它生成一个TRX文件。然后,我们使用TRX->HTML报告工具将报告传递给管理食物链。我们如何在TeamCity对NUnit进行同样的处理


现在我想我需要执行NUnit作为命令行构建步骤,但考虑到有一个NUnit外接程序,MsTest外接程序为我提供了一个“结果文件:”选项,TeamCity以不同的方式执行MsTest和NUnit,这似乎很疯狂

NUnit不是通过NUnit控制台可执行文件运行的,而是通过TeamCity自己的NUnit运行程序运行的。这允许TeamCity动态报告NUnit测试结果——执行78个测试中的测试3…4…5…并允许即时通知失败的测试,即使所有测试尚未执行

另一方面,MSTest直接通过MSTest可执行文件,没有即时报告。除了“进行中”之外,没有其他进展。测试结果(包括任何故障)仅在每次测试运行后报告

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


如果需要报告文件,则需要通过NUnit控制台运行NUnit测试。有很多方法可以做到这一点,其中只有一种方法是使用命令行步骤。但是要注意,无论你使用哪种方法,你都会失去即时报道功能。

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

但有一个已知的解决方法:

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

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

自那以后,他就用核武器攻击了他的博客,所以他不得不用机器来进行救援。如果这些链接也失效,以下是代码片段:

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

要定义任务,请执行以下操作:

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

并将其用于目标:

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

<NUnitMergeOutput NUnitOutputXmlFiles="@(NUnitOutputXmlFiles)"
                  PathOfMergedXmlFile="TestResults\TestResults.xml" /> 
<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" />

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

要定义任务,请执行以下操作:

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

并将其用于目标:

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

<NUnitMergeOutput NUnitOutputXmlFiles="@(NUnitOutputXmlFiles)"
                  PathOfMergedXmlFile="TestResults\TestResults.xml" /> 
<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" />


谢谢杰-不幸的是这是我的根。TeamCity内置的NUnit runner没有输出XML文件(我想知道现在是否有更好的方法来实现这一点,因为编写上述内容时是TC8.0和2014年,而不是2008年?我需要探索这一点的原因是因为我看到了奇怪的行为(怀疑资源匮乏)通过命令行生成步骤或powershell生成步骤执行
nunit控制台时。TC nunit运行程序似乎优化得更好。