3

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

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

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

4

2 回答 2

6

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

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

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

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

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

于 2013-09-05T16:19:39.417 回答
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/

此后,他对自己的博客进行了核爆,因此,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" />
于 2014-02-25T19:24:07.947 回答