使用 TeamCity 8,我如何为 NUnit 运行生成/查找结果文件?
我们目前还运行生成 TRX 文件的 MsTest。然后,我们使用 TRX->HTML 报告工具将报告传递给管理食物链。我们如何在 TeamCity 中对 NUnit 做同样的事情?
现在我在想我需要将 NUnit 作为 CommandLine 构建步骤来执行,但考虑到有一个 NUnit 插件并且 MsTest 插件为我提供了一个“结果文件:”选项,这似乎很疯狂
TeamCity 以不同的方式执行 MSTest 和 NUnit。
NUnit 不是通过 NUnit 控制台可执行文件运行,而是通过 TeamCity 自己的 NUnit 运行程序运行。这允许 TeamCity 即时报告 NUnit 测试结果——执行测试 3...4...5...of 78——并允许即时通知失败的测试,即使尚未执行所有测试。
另一方面,MSTest 直接通过 MSTest 可执行文件,没有即时报告。除了“进行中”之外,没有任何进展。测试结果,包括任何失败,仅在每次测试运行后报告。
TeamCity 需要并解析 MSTest TRX 文件以进行自己的报告,包括任何故障,因此它也可供您使用。但是,NUnit 报告文件是 NUnit 控制台的一部分,而不是 TeamCity 运行器的一部分,因此没有要提供的报告文件。
如果您需要报告文件,则需要通过 NUnit 控制台运行 NUnit 测试。有几种方法可以做到这一点,其中只有一种是使用命令行步骤。但请注意,无论您使用哪种替代方案,您都将失去即时报告。
杰的描述是正确的;这是 TeamCity 的行为,它使这项任务无法开箱即用。
但是有一个已知的解决方法:
http://devnet.jetbrains.com/message/5218450#5218450
本质上,您手动调用 TeamCity NUnit 运行程序(例如从 MSBuild)。然后,运行程序可以输出一个 result.xml 文件(每个测试程序集一个)。然后必须将这些结果文件合并回一个以模拟nunit-console
.
Davy Brion 甚至为此发布了 MSBuild 任务:
http://web.archive.org/web/20080809002009/http://davybrion.com/blog/stuff/
此后,他对自己的博客进行了核爆,因此,waybackmachine 进行了救援。万一这些链接也死了,这里是片段:
NUnitMerge输出
此任务将多个 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" />
BuildTeamCityNUnit参数
TeamCity 不允许您轻松启用其集成的 NUnit 测试支持,同时在构建后仍保留 NUnit 输出 xml 文件。此任务准备一个 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" />