测试执行因源自 Hammerhead 的请求管道的问题而随机中止(Testcafe e2e 测试)

Posted

技术标签:

【中文标题】测试执行因源自 Hammerhead 的请求管道的问题而随机中止(Testcafe e2e 测试)【英文标题】:Test execution randomly aborted by an issue originated in the request-pipeline of Hammerhead (Testcafe e2e tests) 【发布时间】:2022-01-04 14:10:17 【问题描述】:

感谢您对此进行调查!

我们正在运行一个非常全面的测试套件(数百个测试),目的是确保我们的跟踪实现按预期工作。我们每天通过 CI 执行 4 次测试。几周以来,我们出现了随机测试中止,不幸的是,这些中止极难追踪和重现。

当前的行为是什么?

Errors: Unhandled promise rejection:

Error [ERR_HTTP2_INVALID_SESSION]: The session has been destroyed

at new NodeError (node:internal/errors:371:5)

at ClientHttp2Session.request (node:internal/http2/core:1702:13)
at DestinationRequest._sendRealThroughHttp2 (/home/ec2-user/actions-runner/_work/ds_cerberus/ds_cerberus/node_modules/testcafe-hammerhead/lib/request-pipeline/destination-request/index.js:51:32)
at DestinationRequest._send (/home/ec2-user/actions-runner/_work/ds_cerberus/ds_cerberus/node_modules/testcafe-hammerhead/lib/request-pipeline/destination-request/index.js:110:18)
at runMicrotasks (:null:null)

at processTicksAndRejections (node:internal/process/task_queues:96:5)

对我们来说,它看起来像是作为 testcafe 代理的hammerhead-lib 中的一个竞速条件。但我们不知道如何解决这个问题 - 或者至少确保不是整个测试套件都被它中止。

如果测试被中止,这是堆栈跟踪。不幸的是,这意味着所有测试的执行都被中止,并且不仅影响单个测试,这使得整个套件对我们来说毫无用处......

复制步骤

如果测试是在套件中执行而不是单独执行,似乎会有更多的中止 - 但即使在那里也很难识别模式。

TestCafe 版本

"testcafe": "^1.17.1",

Node.js 版本

节点版本:'16.x'

命令行参数

testcafe --config-file .testcaferc-dev.json 测试

【问题讨论】:

【参考方案1】:

该问题可能与 HTTP/2 请求有关。因此,您可以使用以下选项禁用它:disableHttp2。之后检查问题是否重现。

您也可以尝试增加超时时间,例如ajaxRequestTimeout 和 testExecutionTimeout。

如果这没有帮助,请创建一个可重现问题的简单项目并在此处分享。我们将在我们这边进行研究。

【讨论】:

非常感谢 - 我们会尽力让您知道!

以上是关于测试执行因源自 Hammerhead 的请求管道的问题而随机中止(Testcafe e2e 测试)的主要内容,如果未能解决你的问题,请参考以下文章

如何为 lint 和运行测试的拉取请求编写管道

.gitlab-ci.yml 管道中的 Plotly-Dash 测试因 NameError 失败:未定义名称“DashComposite”

Jmeter仪表板因管道分隔符jtl失败

在本地运行 GitLab 和 GitLab-Runner docker 实例时,管道中的构建步骤因连接被拒绝错误而失败

无法签出 Android Hammerhead 内核的 msm 源代码

spring-data-rest 集成测试因简单的 json 请求而失败