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