SpeedTrap сообщает о медленном выполнении тестов PHPUnit прямо в консоли.
На время выполнения теста влияет множество факторов. Тест, не изолированный должным образом от переменных задержек (базы данных, сети и т. д.) и даже от базовой нагрузки на тестовой машине, приведет к колебаниям времени выполнения теста.
SpeedTrap помогает выявить медленные тесты , но не может объяснить, почему эти тесты медленные. Рассмотрите возможность использования Blackfire.io для профилирования набора тестов и выявления медленного кода.
SpeedTrap устанавливается с помощью Composer. Добавьте его как зависимость require-dev
:
composer require --dev johnkary/phpunit-speedtrap
Включите все значения по умолчанию, добавив следующий код в файл phpunit.xml
вашего проекта:
<phpunit bootstrap="vendor/autoload.php"> ... <расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </расширения> </phpunit>
Теперь запустите набор тестов. Если одно или несколько выполнений тестов превысят порог медленности (по умолчанию 500 мс), SpeedTrap сообщит об этих тестах в консоли после завершения всех тестов.
SpeedTrap также поддерживает следующие параметры:
SlowThreshold — количество миллисекунд, в течение которых тест считается «медленным» (по умолчанию: 500 мс).
reportLength — количество медленных тестов, включенных в отчет (по умолчанию: 10 тестов).
Каждый параметр устанавливается в phpunit.xml
:
<phpunit bootstrap="vendor/autoload.php"><!-- ... другая конфигурация пакета здесь... --><расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap"> <аргументы> <массив> <element key="slowThreshold"> <integer>500</integer> </элемент> <element key="reportLength"> <целое>10</целое> </элемент> </массив> </аргументы> </расширение> </расширения> </phpunit>
В некоторых проектах есть несколько сложных тестов, выполнение которых занимает много времени. Для отдельных тестовых случаев можно установить другой порог медленности.
Аннотация @slowThreshold
может установить собственный порог медленности для каждого тестового примера. Это число может быть выше или ниже порогового значения по умолчанию и используется вместо порогового значения по умолчанию для этого конкретного теста.
класс SomeTestCase расширяет PHPUnitFrameworkTestCase {/** * @slowThreshold 5000 */public function testLongRunningProcess() {// Код, выполнение которого занимает больше времени} }
Установка @slowThreshold 0
никогда не будет сообщать об этом тесте как о медленном.
Профили SpeedTrap для медленных тестов, если они включены в phpunit.xml. Но использование переменной среды с именем PHPUNIT_SPEEDTRAP
может включить или отключить расширение:
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI популярен для запуска тестов в облаке после отправки нового кода в репозиторий.
Шаг 1) Включите SpeedTrap в phpunit.xml, но установите PHPUNIT_SPEEDTRAP="disabled"
, чтобы отключить профилирование при запуске тестов.
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </расширения> </phpunit>
Шаг 2) Настройте .travis.yml
с PHPUNIT_SPEEDTRAP="enabled"
для профилирования медленных тестов при работе на Travis CI:
язык: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP="включено"
Шаг 3) Просмотрите выходные данные сборки Travis CI и прочитайте отчет о медленной работе, напечатанный в консоли.
Документация Travis CI — переменные среды
Шаг 1) Включите SpeedTrap в phpunit.xml. Отчет о медленности будет выводиться во время выполнения всех наборов тестов.
<phpunit bootstrap="vendor/autoload.php"> ... <расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </расширения> </phpunit>
Шаг 2) Настройте .travis.yml
с PHPUNIT_SPEEDTRAP="disabled"
, чтобы отключить профилирование при работе на Travis CI:
язык: phpphp: - 7.3env: - PHPUNIT_SPEEDTRAP="отключено"
Шаг 3) Просмотрите выходные данные сборки Travis CI и убедитесь, что отчет о медленной работе не печатается в консоли.
Полезно, когда вы хотите профилировать медленные тесты только время от времени.
Шаг 1) Настройте phpunit.xml, чтобы включить SpeedTrap, но отключите профилирование медленности, установив PHPUNIT_SPEEDTRAP="disabled"
следующим образом:
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="disabled" /> </php> <расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </расширения> </phpunit>
Шаг 2) При запуске phpunit
из командной строки включите профилирование медленности только для этого запуска, передав переменную среды PHPUNIT_SPEEDTRAP="enabled"
следующим образом:
$ PHPUNIT_SPEEDTRAP=включено ./vendor/bin/phpunit
Symfony Framework поставляется с пакетом symfony/phpunit-bridge, который устанавливает собственную версию PHPUnit и игнорирует то, что определено в файлах композитора.json или композитора.lock вашего проекта. Посмотрите версии PHPUnit, которые он устанавливает, с помощью команды ls vendor/bin/.phpunit/
symfony/phpunit-bridge позволяет переменной окружения SYMFONY_PHPUNIT_REQUIRE
определять дополнительные зависимости при установке phpunit.
Самый простой способ установить переменные среды для скрипта simple-phpunit
— через phpunit.xml.dist:
<phpunit bootstrap="vendor/autoload.php"> <php> <env name="SYMFONY_PHPUNIT_REQUIRE" value="johnkary/phpunit-speedtrap:^4"/> <env name="SYMFONY_PHPUNIT_VERSION" value="9"/> </php> <расширения> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </расширения> </phpunit>
Используя приведенный выше пример, vendor/bin/simple-phpunit
теперь установит последнюю версию PHPUnit 9 и потребует последнюю версию phpunit-speedtrap v4.
Выполните следующие шаги, чтобы добавить новые функции или разработать собственную вилку:
# Get source code (or replace with your fork URL) $ git checkout https://github.com/johnkary/phpunit-speedtrap.git phpunit-speedtrap # Install dev dependencies $ cd phpunit-speedtrap $ composer install # Run test suite to verify code runs as expected $ vendor/bin/phpunit
SpeedTrap был создан на основе опции --profile
RSpec, которая отображает отзывы о медленных тестах.
phpunit-speedtrap доступен по лицензии MIT.