Mik*_*ike 10 phpunit php-7 php-7.1 php-7.2 laravel-5.5
如果我使用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
Run Code Online (Sandbox Code Playgroud)
我也在使用内存中的SQLite3数据库,以及Laravel CreatesApplication和RefreshDatabasetrait,因为我希望每个测试都能独立运行.
我没有安装或运行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
Run Code Online (Sandbox Code Playgroud)
结果
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
Run Code Online (Sandbox Code Playgroud)
我和你有同样的问题,但是安装了 XDebug。我在 Laracasts 上发现了一个名为 Roni 的用户提供的一个非常好的提示(抱歉,我找不到链接了),它说使用-n命令标志运行测试php,如下所示:php -n vendor/bin/phpunit。
根据php.net 上的文档(命令行选项),这是为了在没有 php.ini 定义的情况下运行命令。这意味着不包含扩展。
-n 不使用 php.ini 文件
所以,对我来说,现在测试只需一分钟,而不是 15 分钟。这个问题有点奇怪,因为它从我的机器上的 php 7.2 开始,但我团队中的其他人没有这个问题,尽管安装了 xdebug。我想知道这个问题背后到底是什么。