【问题标题】:Teamcity rerun specific failed unstable testsTeamcity 重新运行特定失败的不稳定测试
【发布时间】:2014-02-24 09:59:17
【问题描述】:

我有 Teamcity 7.1 和大约 1000 个测试。许多测试不稳定并且随机失败。即使单个测试失败,整个构建也会失败,并且运行新构建需要 1 小时。

所以我希望能够将 Teamcity 配置为在特定时间内在同一构建中重新运行失败的测试。测试的任何成功都应被视为成功,而不是失败。有可能吗?

现在还有一些模块中的测试失败 Teamcity 不会进入下一个模块。如何解决?

【问题讨论】:

    标签: testing build teamcity teamcity-7.1


    【解决方案1】:

    恕我直言,我认为您可能会遇到这个问题。随机失败的测试不会为您提供任何值作为确定性行为的指标。要么修复随机性(通过使用模拟等),要么忽略测试。

    【讨论】:

    • 涉及到很多异步复杂的人员。失败概率非常低,几乎从不局部失败。但是随着大量测试的失败,整个构建的概率会变得更高。
    【解决方案2】:

    如果您绝对必须这样做,我会在您的一些测试代码周围放置循环,并在将异常作为“真正”失败抛出之前捕获 5 次失败。像这个 C# 示例这样的东西会做......

        public static void TestSomething()
        {
            var counter = 0;
            while (true)
            {
                try
                {
                    // add test code here...
                    return;
                }
                catch (Exception) // catch more specific exception(s)...
                {
                    if (counter == 4)
                    {
                        throw;
                    }
    
                    counter++;
                }
            }
        }
    

    虽然我很欣赏测试异步代码可能出现的问题,但我和@JohnHoerr 一起讨论这个问题,你真的需要修复测试。

    【讨论】:

    • 太丑了,我需要列出经常失败的测试列表并修补它们的代码。
    • 不可否认它的丑陋!我想不出一种方法可以让 TC 重新运行失败的测试,这可能是实现目标的最简单方法。
    【解决方案3】:

    如果您执行mvn -Dsurefire.rerunFailingTestsCount=2 test,则重新运行失败的测试功能是 Maven Surefire 插件的一部分 然后测试将一直运行,直到它们通过或重新运行的次数已用完。

    当然,-Dsurefire.rerunFailingTestsCount 可以在 TeamCity 或任何其他 CI 服务器中使用。

    见: http://maven.apache.org/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多