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

时间:2018-01-14 11:42:23

标签: phpunit php-7 laravel-5.5 php-7.1 php-7.2

如果我使用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

1 个答案:

答案 0 :(得分:0)

我遇到了与您相同的问题,但是安装了XDebug。我在Laracasts上找到了一个名叫Roni的​​用户的很好的提示(抱歉,我再也找不到链接了),该提示说要使用-n命令的php标志运行测试,如下所示: php -n vendor/bin/phpunit

根据php.net (command line options)上的文档,这是用于运行没有php.ini定义的命令的命令。这意味着不包括扩展名。

  

-n将不使用php.ini文件

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