PHPUnit 在 CI 中停滞

Sam*_*uel 9 php phpunit unit-testing

我们遇到了 PHPUnit 的问题,有时无法在 CI 中正确运行我们的测试套件。该行为表现为大约 1/3 的测试无法启动并且 CI 步骤超时。有趣的是,我们没有看到这种行为:

  1. 在我们的机器上本地
  2. 每次我们运行测试
  3. 与黄昏测试一起发生

我们的设置是使用 docker compose 运行测试。我们专门先启动应用容器的依赖,然后暂停30秒等待它们上来(即数据库)。

我试图解决的一些问题并没有产生影响:

  1. 在进程隔离打开的情况下运行测试。
  2. 将测试套件拆分为两个以运行更少的测试(两个拆分都有相同的问题)

测试在 Github Actions 中运行,这使得机器可以使用大约 7 gig 的内存以及多个内核。

同样有趣的是,基于黄昏的测试从未像这样停滞不前,尽管它们使用相同的 docker-compose 文件但具有附加服务(如 Selenium)。

我不确定这是否有明确的答案,但我现在不知道下一步要尝试什么(没有自己托管 GitHub 操作运行程序)。

失败测试的输出如下所示:

+ sleep 30
+ docker-compose -f docker-compose.ci.yml run --rm postgres pg_isready -h postgres -d testing -U testing -t 30
postgres:5432 - accepting connections
+ docker-compose -f docker-compose.ci.yml run --no-deps backend phpunit '--filter=/::test[J-Z|j-z]/' --testdox
Pulling backend (***.dkr.ecr.ap-southeast-2.amazonaws.com/builder:acb548c6125ad97e57e8070c414644c7e6f385f5)...
acb548c6125ad97e57e8070c414644c7e6f385f5: Pulling from builder
Digest: sha256:c84a53dbb201b809a2325a93c52d4a362eefa6de64ab98f759e43c5dd363aac2
Status: Downloaded newer image for ***.dkr.ecr.ap-southeast-2.amazonaws.com/builder:acb548c6125ad97e57e8070c414644c7e6f385f5
PHPUnit 9.1.5 by Sebastian Bergmann and contributors.

##[error]The operation was canceled.
Run Code Online (Sandbox Code Playgroud)

成功运行:

+ sleep 30
+ docker-compose -f docker-compose.ci.yml run --rm postgres pg_isready -h postgres -d testing -U testing -t 30
postgres:5432 - accepting connections
+ docker-compose -f docker-compose.ci.yml run --no-deps backend phpunit '--filter=/::test[A-I|a-i]/' --testdox
Pulling backend (***.dkr.ecr.ap-southeast-2.amazonaws.com/builder:acb548c6125ad97e57e8070c414644c7e6f385f5)...
acb548c6125ad97e57e8070c414644c7e6f385f5: Pulling from builder
Digest: sha256:c84a53dbb201b809a2325a93c52d4a362eefa6de64ab98f759e43c5dd363aac2
Status: Downloaded newer image for ***.dkr.ecr.ap-southeast-2.amazonaws.com/builder:acb548c6125ad97e57e8070c414644c7e6f385f5
PHPUnit 9.1.5 by Sebastian Bergmann and contributors.

Audit Controller (Tests\Feature\Admin\AuditController)
 ? Audits index
Run Code Online (Sandbox Code Playgroud)

(我已经截断了完整的测试输出)

有时我会看到它在停止之前达到第一个测试。

小智 0

我在 Codeception 测试框架上遇到了类似(但不相同)的问题,但我没有使用 Github Actions 和 docker。

问题在于测试期间数据库如何部署到服务器的方式。因为该数据库已经部署了很长一段时间,但在那之后,测试就开始了。我们对服务器没有限制,所以没有超时。

在本地机器上它工作正常。

据我所知,您正在使用数据库运行功能/验收测试,因此我建议检查数据库模块。