5

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

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

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

4

3 回答 3

2

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

于 2014-02-24T14:48:41.920 回答
1

如果您绝对必须这样做,我会在您的一些测试代码周围放置循环,并在将异常作为“真正”失败抛出之前捕获 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 一起讨论这个问题,你真的需要修复测试。

于 2014-02-24T21:36:51.440 回答
0

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

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

请参阅: http ://maven.apache.org/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html

于 2016-08-11T10:27:46.413 回答