使用TeamCity 8,如何为NUnit运行生成/查找结果文件?
我们目前还运行产生TRX文件的MsTest。然后,我们使用TRX-> HTML报告工具将报告传递到管理食物链。我们如何在TeamCity中对NUnit做同样的事情?
现在我认为我需要将NUnit作为CommandLine构建步骤执行,但考虑到有一个NUnit加载项并且MsTest加载项为我提供了“结果文件:”选项,这似乎很疯狂
答案 0 :(得分:5)
TeamCity以不同方式执行MSTest和NUnit。
NUnit不是通过NUnit控制台可执行文件运行,而是通过TeamCity自己的NUnit运行程序运行。这允许TeamCity即时报告NUnit测试结果 - 执行测试3 ... 4 ... 5 ... 78 - 并允许即时通知失败的测试,即使所有测试尚未执行。 / p> 另一方面,MSTest直接通过MSTest可执行文件,并且没有实时报告。除了"进展中没有进展"。测试结果(包括任何故障)仅在每次测试运行后报告。
TeamCity需要并解析MSTest TRX文件以执行自己的报告,包括任何失败,因此它也可供您使用。但是,NUnit报告文件是NUnit控制台的一部分,而不是TeamCity运行程序的一部分,因此没有要提供的报告文件。
如果需要报告文件,则需要通过NUnit控制台运行NUnit测试。有several ways这样做,其中只有一个使用命令行步骤。但请注意,无论您使用哪种替代方案,都会失去即时报告。
答案 1 :(得分:3)
虽然有一个已知的解决方法:
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/
从那以后,他已经开始了他的博客,所以我还要回避这个问题。如果这些链接也死掉了,这里有一些片段: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输出xml文件的同时启用其集成的NUnit测试支持。此任务准备一个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" />