【问题标题】:How to fix failed tests count in teamcity for re-executed tests?如何修复teamcity中失败的测试计数以重新执行测试?
【发布时间】:2016-09-03 18:38:47
【问题描述】:

我们使用 TeamCity 来执行 Specflow+SpecrunSelenium 测试,问题是 TeamCity 计数重新执行了测试。 p>

例如,如果某个测试第一次失败,他将被重新执行两次,在 teamcity 中我们会看到三个测试失败,但可能是一次测试。

另外,如果第一次重新执行失败,但其他两次成功,这将在teamcity中报告为两次失败,一次通过,但我需要报告只通过了一次测试。

是否可以在 TeamCity 中使用服务消息或其他方式进行配置?

更新:

根据回答,我们可以使用 powershell 脚本收集日志并使用 teamcity 服务消息更改构建状态:

$path = Get-ChildItem %teamcity.build.checkoutDir%\ProjectFolder\bin\Remote\TestResults\specrun.log
$file = Get-content $path
$total = $file | select-string "Total:"
$passed = $file | select-string "Succeeded:"
$failed = $file | select-string "Failed:"

write-host $( "##teamcity[buildStatus text='Tests {0}, {1}, {2}']" -f $total, $passed, $failed )

【问题讨论】:

  • 谢谢。非常有用的脚本。

标签: continuous-integration automated-tests teamcity specflow specrun


【解决方案1】:

TeamCity 的行为符合预期。 TeamCity 报告了测试框架告诉他的内容。大致流程是:

  • 执行运行测试的步骤。
  • 收集输出日志。
  • 提取统计信息:执行、通过和失败的测试数量。
  • 如果配置为测试失败,则构建失败。

您必须配置您的测试框架(在您的情况下为 specflow+specrun)以更改它报告重新执行的方式。 您应该将 specflow 配置为以不同的方式记录重新执行...如果可以的话。

一般而言,您应该避免重新执行测试。测试应该在第一次尝试时起作用。如果需要,他们应该准备状态,进行测试并清理状态。

需要重新执行可能表明与其他测试存在某种依赖性。比如:

  • Test 001:搜索用户 Foo1。 (失败
  • Test 002:添加用户 Foo1。 (好的
  • 重新执行Test 001:搜索用户Foo1。 (好的

正确的做法是TEST001没有TEST002的依赖,添加用户Foo1,测试搜索并清理用户Foo1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多