[spring-projects/spring-boot]调查不稳定的测试

2024-07-08 666 views
9

你好,

无论是在本地还是在 CI 上,我都会遇到相对频繁的不稳定测试。虽然大多数时候我都认为它们不稳定并会忽略它们,但这种情况发生得太频繁了,以至于我花费/浪费了时间来识别这些失败是否是由我的更改引起的。

这可能不是一份完整的清单,但以下是我最近注意到的事情:

ReactiveElasticsearchRepositoriesAutoConfigurationTests > doesNotTriggerDefaultRepositoryDetectionIfCustomized()
ReactiveElasticsearchRepositoriesAutoConfigurationTests > testDefaultRepositoryConfiguration()
DataCassandraTestIntegrationTests > didNotInjectExampleService()
Jetty10ServletWebServerFactoryTests > whenServerIsShuttingDownGracefullyThenResponseToRequestOnIdleConnectionWillHaveAConnectionCloseHeader()
CouchbaseAutoConfigurationIntegrationTests > defaultConfiguration()

主观上,JDK 15 管道有点不稳定,但这可能是错误的线索。

无论如何 - 我想知道我们能做些什么。我记得你已经做了很棒的工作,在这里和那里增加了超时时间,并调整了测试容器的启动尝试,但我认为在上述大多数情况下,我们已经过了测试容器阶段。

干杯,克里斯托弗

回答

9

也许这是一个愚蠢的问题,但是是否有可能在 ge.spring.io 上对失败的构建扫描进行“grep”以获取更完整的不稳定测试列表?

6

哦,太棒了——我希望 Gradle Enterprise 有这样的功能。感谢分享这个观点,@wilkinsona。

从直觉上来说——这可能是错误的——大多数故障都与某种超时有关,对吧?我想知道并行性——尽管它有所帮助——是否会给整个系统带来更多压力,从而导致更多超时。鉴于您在调整任务缓存方面做得非常出色,这可能是值得尝试的事情吗?

9

我认为不稳定测试的另一个共同点是,其中许多测试都使用 Docker。上面列出的五个测试中,有四个使用 Docker,我认为并行性可能是原因之一。

当我在进行构建迁移时,允许 Gradle 为每个核心创建一个工作线程会让事情变得非常不稳定,并导致许多与 Docker 相关的故障。至少在我们的开发机器上,每两个核心一个工作线程似乎运行良好。我的 MacBook Pro 有 16 个核心,所以我有以下内容~/.gradle/gradle.properties

org.gradle.workers.max=8

我们将 CI 上的最大工作线程数配置为 4,因为据我回忆,它们有 8 个核心。我们可以尝试调低这个值,但我不想让所有东西都慢下来,以避免出现至少在某种程度上 Docker 特有的问题。我很想再进行一轮超时增加,看看结果如何。

3

可能是更好的测试失败链接。它添加了CI标签,因此可以过滤掉我们的开发机器上的失败,因为在迭代新功能时可能会出现问题。

0

是的,@dreis2211。升级这三个对我来说是个好主意。

0

我还注意到,显然 中的库最近spring-boot-parent没有运行bomr。 testcontainers 已更新至 1.15.2。如果我应该为更新创建 PR 或者您想运行 ,请告诉我bomr

0

我将在所有三个维护的分支上运行 Bomr。

5

最近事情似乎已经平息了不少,所以我现在就结束这篇博文。我们可以在未来再看看,看看我们是否再次注意到不稳定因素的增加。

6

CouchbaseAutoConfigurationIntegrationTests又不稳定了。最近我见过它失败了好几次。重新打开再看看。

1

@daschl 建议我们启用调试日志记录com.couchbase。这将有助于确定存储桶尚未准备好的原因。

5

@daschl 还建议升级到最新的 Couchbase 驱动程序。升级后我再也没有看到过任何不稳定的测试,所以我打算再次关闭这个。