тестовете на phpunit, изпълнявани с PHP7.2 и 7.1, са 3 пъти по-бавни, отколкото когато се изпълняват с PHP7.0

Ако изпълнявам тестовете си с PHP7.2 или PHP7.1, те са около 3 пъти по-бавни, отколкото ако ги изпълнявам с PHP7.0. Има ли все пак да стигнем до дъното защо това се случва?

Дори когато стартирам тестовите пакети (Feature & Unit) отделно, пак виждам забавяне. Само когато пусна тестовете поотделно, разликата в скоростта става незначителна.

Използвам 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 CreatesApplication и RefreshDatabase, тъй като искам всеки тест да се изпълнява независимо.

Нямам инсталиран или работещ 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

person Michael    schedule 14.01.2018    source източник
comment
Моля, стартирайте phpunit под perf record и след това проверете изхода на perf report и за двата случая.   -  person NikiC    schedule 14.01.2018
comment
Имам същия проблем. Намерих код за почистване на tearDown на Крис Уолсмит. Тестовете се изпълняват с 44% по-бързо, но паметта се увеличава с 5 пъти. Надявам се тази информация да е полезна.   -  person stevo    schedule 26.02.2018


Отговори (1)


Имах същия проблем като теб, но с инсталиран XDebug. Намерих доста добър намек от потребител на име Roni в Laracasts (вече не мога да намеря връзката, съжалявам), който казва да се изпълняват тестове с флага -n на командата php, като този: php -n vendor/bin/phpunit.

Според документацията в php.net (опции на командния ред) това е за изпълнение на командата без това, което php.ini дефинира. Което означава, че не включва разширения.

-n Няма да се използва файл php.ini

Така че за мен сега изпълнява тестове за минута, а не за 15 минути. Проблемът е малко странен, защото започна с php 7.2 на моята машина, но други в моя екип нямат проблема, въпреки факта, че xdebug е инсталиран. Чудя се какво наистина стои зад този проблем.

person Michael K.    schedule 07.11.2018
comment
Благодаря ви, ще видя дали ще помогне. - person Michael; 07.11.2018
comment
Благодаря за съвета, това значително ускорява тестовете, когато не се изисква покритие/xdebug - person Carlton; 14.06.2019
comment
Можете също така да направите php -d xdebug.mode=off ./vendor/bin/phpunit, което ми се струва по-чисто - person Ian Dunn; 22.12.2020