CircleCi在运行Karma规格时随机断开与浏览器的连接

问题描述 投票:0回答:1

我有一个用Angularjs编写的大型程序,并且正在迁移到Angular 7(很快将是8)。我们有9000多个规范,其中约1/4是Angular7。一段时间以来,CircleCI有时会因以下错误消息而使整个套件失败:

HeadlessChrome 78.0.3904 (Linux 0.0.0) ERROR
Disconnectedreconnect failed before timeout of 2000ms (transport close)
HeadlessChrome 78.0.3904 (Linux 0.0.0): Executed 8962 of 9075 DISCONNECTED (6 mins 29.171 secs / 6 mins 7.538 secs)
error Command failed with exit code 1.

执行的规范在某种程度上是随机的,这些规范在8900到9050之间失效。

几周前,它开始总是在一个分支上失败,并迫使master分支重新运行时显示出相同的错误。

所有规格均使用相似的构建,相同的Headless Chrome版本,相同的测试运行程序在本地干净地执行。主要区别在于报告程序有所不同(我们在CircleCI上使用点报告程序,并且在本地使用更多摘要)。

我已经在CircleCI的“知识库”中搜索“断开连接”和“易碎性”,没有可用的结果。 Google中与此有关的大多数搜索结果都来自古老版本的东西……HeadlessChrome,Karma,Jasmine等。例如,我尝试设置没有沙箱的自定义“ HeadlessChrome”,但没有可用。

问题出在哪里,您对如何进行诊断有什么建议?

angular automated-tests circleci
1个回答
0
投票

客户支持回到了我的身边,并通知我我已将所有可用内存用于一个过程。目前,Circle Ci仅允许容器使用多达4GB的RAM,而容器操作系统,Angular和angularjs框架,Jasmine和Karma库以及我们所有的生产和测试代码,我们都用光了空间。 >

显然,我们已经在4GB的内存上徘徊了一段时间,所以我们遇到了间歇性的故障,但是我的新分支最终将故障完全推了过来。我们努力确保没有内存泄漏,但是在某些时候,您的代码太多了。

所以我的解决方案是拆分测试。我们有几个延迟加载的模块,但是到目前为止,我们最好的分割是在Angular和angularjs上进行(因为它允许更好的转换设置)。因此,在我的茉莉花配置中,选择要包含的文件时,我更新了第二行:

_requireContext(require.context('../lib/fixtures', true, /\.js$/););
_requireContext(require.context('./app', true, /\.spec\.[j|t]s$/));

function _requireContext(context: any) {
  context.keys().forEach((path: string) => {
    try {
      context(path);
    } catch (err) {
      /* tslint:disable */
      console.error(`[ERROR] REQUIRING FILE: ${path}`);
      console.error(err);
      /* tslint:enable */
      throw err;
    }
  });
}

要包含或排除打字稿/ JavaScript文件,我很高兴。它看起来像这样:

_requireContext(require.context('./app', true, /\.spec\.js$/));

vs

_requireContext(require.context('./app', true, /\.spec\.ts$/));

它增加了复杂性(现在我基本上有两个测试套件),但是它可以正常工作,并且总体而言,我的规格在CircleCI上也运行得更快。

最后一个注释-开发计算机上的问题为零-显然我有超过4GB的RAM,要查看测试套件在CircleCI上使用的RAM的唯一方法是直接询问他们。在网站上找不到该统计信息。

© www.soinside.com 2019 - 2024. All rights reserved.