如何修复失败的测试计数在teamcity重新执行测试?

时间:2016-05-09 08:01:15

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

我们正在使用 TeamCity 进行 Selenium 测试执行 Specflow + Specrun ,问题是TeamCity计数重新执行测试。

例如,如果某些测试第一次失败,他将被重新执行两次以上,在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 )

1 个答案:

答案 0 :(得分:1)

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

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

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

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

重新执行的需要表明可能与其他测试有一些依赖关系。类似的东西:

  • 测试001 :搜索用户Foo1。 (的失败
  • 测试002 :添加用户Foo1。 (确定
  • 重新执行测试001 :搜索用户Foo1。 (确定

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