Давайте быстро рассмотрим настройку, чтобы начать параллельное тестирование и настроить отчеты о покрытии кода, чтобы проанализировать, сколько нашего кода тестируется.
Я лично копаю HTML-отчеты через XDebug, так как я люблю визуализировать покрытие строка за строкой во время работы над функцией:
я покажу вам, как быстро настроить HTML-отчеты в этом уроке, а также настроить параллельное тестирование в новом проекте.
Параллельное тестирование настроек
официально поддерживается в Laravel с Artisan начиная с Laravel v8.25. Давайте рассмотрим настройку параллельного тестирования и отчетов о покрытии, создав новый проект Laravel и пройдя через процесс установки Paratest и настройки наших отчетов.
Параллельный запуск тестов в новом проекте не поможет ускорить наши тестовые запуски; однако по мере роста тестов вы заметите, что производительность увеличивается.
Во-первых, создайте новое приложение Laravel, и мы будем управлять его версиями, чтобы мы могли видеть изменения на этом пути по мере работы над установкой.
laravel new parallel-demo --git
Команда laravel
создает наш проект и фиксирует код, поэтому мы получаем чистую установку и одну фиксацию.
Чтобы использовать флаг Laravel --parallel
в PHPUnit, мы должны установить ParaTest. Laravel делает это легко, побуждая нас сделать это при первом запуске тестов:
php artisan test --parallel
Running tests in parallel requires "brianium/paratest". Do you wish to install it as a dev dependency? (yes/no) [no]:
> yes
Using version ^6.6 for brianium/paratest
./composer.json has been updated
# ...
ParaTest v6.6.4 upon PHPUnit 9.5.25 #StandWithUkraine
.. 2 / 2 (100%)
Time: 00:00.300, Memory: 22.00 MB
OK (2 tests, 2 assertions)
Paratest теперь установлен правильно, и мы можем перейти к запуску тестов с покрытием и настройке HTML-отчетов.
Отчеты о
покрытии Еще одним полезным тестовым флагом является --coverage
, который выводит красивую текстовую версию на терминал:
php artisan test --parallel --coverage
ERROR Code coverage driver not available. Did you set Xdebug's coverage mode?
В зависимости от вашей локальной настройки PHP вы можете получить приведенное выше сообщение об ошибке, предлагающее вам установить режим покрытия Xdebug. Мы не будем вдаваться в подробности настройки инструментов покрытия кода, но доступно несколько вариантов. Я не возражаю против использования покрытия Xdebug 3, так как я часто использую Xdebug для отладки в разработке.
Чтобы заставить покрытие работать, вам нужно увидеть режим Xdebug для покрытия:
XDEBUG_MODE=coverage php artisan test --parallel --coverage
После выполнения приведенной выше команды вы должны увидеть что-то похожее для ваших отчетов о покрытии:
отчеты о
While text-based coverage is helpful, I like using отчеты о to visualize lines of code that are covered and not covered. They are highlighted in green and red:
Приведенный выше код является примером из установки Laravel по умолчанию, и я позволю вам решить, хотите ли вы протестировать / покрыть код, который поставляется с Laravel. Я придерживаюсь мнения, что предпочитаю игнорировать изначально сгенерированные файлы и сосредоточиться только на коде, который я добавляю в приложение.
Добавление HTML-отчетов довольно просто. phpunit.xml
Откройте файл, найдите <coverage/>
и добавьте <report/>
тег:
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./app</directory>
</include>
<report>
<html outputDirectory="tests/Coverage/html"/>
</report>
</coverage>
Вы можете поместить покрытие в любое место, но вы, вероятно, захотите игнорировать созданные файлы из системы управления версиями. Возможно, вы могли бы использовать папку coverage/
в корне проекта, поместить ее где-то в storage
, или встроить ее в папку tests/
, как указано выше. Выбор за вами!
Используя приведенный выше пример пути, добавьте в файл следующее .gitignore
:
# ...
tests/Coverage/
При выполнении тестов с покрытием он создаст HTML-отчет. Затем можно открыть tests/Coverage/html/index.html
файл в браузере для просмотра отчета.
При этом у вас должна быть хорошая настройка для параллельного выполнения тестов и настройки HTML-отчетов для легкой визуализации покрытия в разработке!
Хотя мы создаем параллельные отчеты о тестировании и покрытии, мы могли бы улучшить отчеты о покрытии, игнорируя файлы, которые поставляются с установкой Laravel по умолчанию.