使用 PHP7.2 和 7.1 运行的 phpunit 测试比使用 PHP7.0 运行时慢 3 倍

Posted

技术标签:

【中文标题】使用 PHP7.2 和 7.1 运行的 phpunit 测试比使用 PHP7.0 运行时慢 3 倍【英文标题】:phpunit tests run using PHP7.2 and 7.1 are 3x slower than when run using PHP7.0 【发布时间】:2018-06-23 06:29:13 【问题描述】:

如果我使用 php7.2 或 PHP7.1 运行测试,它们的速度比使用 PHP7.0 运行它们的速度慢 3 倍。有没有办法弄清楚为什么会发生这种情况?

即使我单独运行测试套件(功能和单元),我仍然会看到速度变慢。只有当我单独运行测试时,速度差异才会变得微不足道。

我正在使用 Laravel 5.5.20 和 Laravel Homestead 7.0.1。我有 47 个相当简单的测试,有的打到数据库,有的只是简单的断言;所以没有什么需要很长时间的。

我安装了johnkary/phpunit-speedtrap 以查看哪些测试花费的时间最长,因此我可以删除这些测试,但没有一个特定的测试需要很长时间,因为如果我删除有问题的测试,下一个测试将需要很长时间(见下文)。

First Run                Second Run
Test A    0.2 sec        Test A    0.2 sec
Test B.   0.3 sec        Test B.   0.3 sec
Test C    0.1 sec        Test C    0.1 sec
Test D    0.1 sec        Test D    0.1 sec
Test E    9.3 sec        REMOVED Test E
Test F    0.3 sec        Test F    9.3 sec <-- Test F now takes ages
Test G    0.2 sec        Test G    0.2 sec

我还使用内存中的 SQLite3 数据库,具有 Laravel CreatesApplicationRefreshDatabase 特征,因为我希望每个测试都独立运行。

我没有安装或运行 Xdebug。是否知道 PHP7.1 和 PHP7.2 需要很长时间才能运行 PHPUnit 测试?还有什么我可以安装(甚至使用 Xdebug 运行它)来追踪导致问题的确切原因吗?

设置

Laravel 5.5.20
Laravel Homestead 7.0.1 (Per-project installation)
PHPUnit 6.4.4
Vagrant 2.0.1
Virtualbox 5.2.4

结果

PHP 7.2 PHPUnit 6.4.4
Time: 12.4 seconds, Memory: 162.00MB

PHP 7.1 PHPUnit 6.4.4
Time: 12.19 seconds, Memory: 162.00MB

PHP 7.0 PHPUnit 6.4.4
Time: 4.88 seconds, Memory: 162.00MB

【问题讨论】:

请在perf record 下运行phpunit,然后检查perf report 的两种情况的输出。 我遇到了同样的问题。我找到了 Kris Wallsmith tearDown cleanup code。测试运行速度提高了 44%,但内存增加了 5 倍。我希望这些信息对您有所帮助。 【参考方案1】:

我和你有同样的问题,但安装了 XDebug。我在 Laracasts 上发现了一个名为 Roni 的用户的一个很好的提示(我找不到链接了,抱歉),它说使用 php 命令的 -n 标志运行测试,如下所示:php -n vendor/bin/phpunit

根据php.net (command line options) 的文档,这是为了在没有 php.ini 定义的情况下运行命令。这意味着不包含扩展。

-n 不使用 php.ini 文件

所以,对我来说,它现在在一分钟内运行测试,而不是 15 分钟。这个问题有点奇怪,因为它从我机器上的 php 7.2 开始,但我团队中的其他人没有这个问题,尽管安装了 xdebug。我想知道这个问题背后的真正原因。

【讨论】:

谢谢,我看看有没有帮助。 感谢您的提示,当不需要覆盖/xdebug 时,这会大大加快测试速度 你也可以php -d xdebug.mode=off ./vendor/bin/phpunit,感觉更干净

以上是关于使用 PHP7.2 和 7.1 运行的 phpunit 测试比使用 PHP7.0 运行时慢 3 倍的主要内容,如果未能解决你的问题,请参考以下文章

在 nginx 上安装 PHP7.2 时出现 502 Bad Gateway

php7使用xhprof测试php性能

PHP7.2中安装mcrypt扩展的问题

win10 php7.2 nginx 安装 imagick,适用于phpstudy

Ubuntu 切换 php 版本

POSCMS 框架使用导航