【问题标题】:NUnit results file in TeamCityTeamCity 中的 NUnit 结果文件
【发布时间】:2013-09-03 09:15:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: nunit teamcity


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢杰 - 不幸的是,这是我的根。耻辱 TeamCity 的内置 NUnit runner 不输出 XML 文件 :(
    【解决方案2】:

    Jay 的描述是正确的;这就是 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 来救援。如果这些链接也失效了,这里是 sn-ps:

    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 测试支持,同时在构建后仍保留 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" />
    

    【讨论】:

    • 我想知道现在是否有更好的方法可以做到这一点,因为上面写的是 TC 8.0 和 2014 而不是 2008?
    • 我需要探索这个的原因是因为我在通过命令行构建步骤或 powershell 构建步骤执行nunit-console 时看到了奇怪的行为(怀疑资源不足)。 TC nunit runner 似乎得到了更好的优化。
    猜你喜欢
    • 2010-12-17
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多