【问题标题】:TeamCity - Stop build when a test failsTeamCity - 测试失败时停止构建
【发布时间】:2013-07-30 21:26:58
【问题描述】:

当单元测试失败时,是否可以停止 TeamCity 构建(整个构建,即它不会执行后续步骤)?理想情况下,我还希望它终止当前执行的步骤,在我的情况下是 Nunit Test Runner。在我的情况下,如果单个单元测试失败,则继续构建毫无意义。我查看了失败条件,但我认为它们不适用于构建继续运行。

请求的功能:http://youtrack.jetbrains.com/issue/YTF-3275

【问题讨论】:

标签: continuous-integration nunit teamcity build-server


【解决方案1】:

您可以使用 nunit-console.exe 来完成。 根据官方文档 (http://nunit.org/index.php?p=consoleCommandLine&r=2.6.2),它提供了一个 /stoponerror 开关,可以完全满足您的需求。

它还可以生成可以被 teamcity 解析的 XML 输出(有一个构建功能),以填充“测试”选项卡。

【讨论】:

  • 这似乎是唯一的方法,它很老套,我不喜欢它,所以我联系了 TeamCity,看看我是否可以提交功能请求。
  • 在 8.0.5 中还是这样吗?看来现在应该修好了。 XUnit 或 MSTest 是否得到更好的支持?
【解决方案2】:

如您所述,TeamCity 无法在 NUnit 测试中以“仅当构建状态成功”步骤执行条件的情况下对测试失败运行进一步的构建步骤。但是,这不会使测试在步骤完成之前停止。

一个相关的功能请求是TW-23766

我目前可以考虑的唯一解决方法是不使用 NUnit 测试运行程序并在构建脚本中实现逻辑。例如,像 Manuel 指出的 nunit-console.exe。如果您选择遵循此路线,请考虑使用TeamCity Addin for NUNit

【讨论】:

    【解决方案3】:

    在单元测试后的构建步骤中,将设置更改为 Only if Build status is successful 而不是 if all previous steps finished successfully

    看截图

    还要确保failure conditions 菜单项下的at least one test failed 选项也被勾选。

    【讨论】: