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>
次に、テスト スイートを実行します。 1 つ以上のテスト実行が速度のしきい値 (デフォルトでは 500 ミリ秒) を超えた場合、SpeedTrap はすべてのテストが完了した後にコンソールにそれらのテストをレポートします。
SpeedTrap は次のパラメータもサポートしています。
lowThreshold - テストが「遅い」とみなされるミリ秒数 (デフォルト: 500ms)
reportLength - レポートに含まれる低速テストの数 (デフォルト: 10 テスト)
各パラメータはphpunit.xml
で設定されます。
<phpunit bootstrap="vendor/autoload.php"><!-- ... 他のスイート構成はここにあります ... --><拡張機能> <extension class="JohnKaryPHPUnitExtensionSpeedTrap"> <引数> <配列> <要素キー="slowThreshold"> <整数>500</整数> </要素> <要素キー="レポートの長さ"> <整数>10</整数> </要素> </配列> </引数> </拡張子> </拡張機能> </phpunit>
一部のプロジェクトには、実行に時間がかかる複雑なテストがいくつか含まれています。個々のテスト ケースに異なる速度のしきい値を設定することができます。
注釈@slowThreshold
テスト ケースごとにカスタムの低速しきい値を設定できます。この数値はデフォルトのしきい値よりも高い場合も低い場合もあり、その特定のテストのデフォルトのしきい値の代わりに使用されます。
クラス SomeTestCase は PHPUnitFrameworkTestCase を拡張します {/** * @slowThreshold 5000 */パブリック関数 testLongRunningProcess() {// 実行に時間がかかるコード} }
@slowThreshold 0
設定すると、そのテストが遅いと報告されることはありません。
phpunit.xml で有効になっている場合、遅いテスト用の SpeedTrap プロファイル。ただし、 PHPUNIT_SPEEDTRAP
という名前の環境変数を使用すると、拡張機能を有効または無効にすることができます。
$ PHPUNIT_SPEEDTRAP="disabled" ./vendor/bin/phpunit
Travis CI は、新しいコードをリポジトリにプッシュした後にクラウドでテストを実行する場合に人気があります。
ステップ 1) phpunit.xml で SpeedTrap を有効にしますが、テストの実行時にプロファイリングを無効にするには、 PHPUNIT_SPEEDTRAP="disabled"
を設定します。
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="無効" /> </php> <拡張機能> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </拡張機能> </phpunit>
ステップ 2) Travis CI での実行時に遅いテストをプロファイリングするためにPHPUNIT_SPEEDTRAP="enabled"
を使用して.travis.yml
構成します。
言語: phpphp: - 7.3環境: - PHPUNIT_SPEEDTRAP="有効"
ステップ 3) Travis CI ビルド出力を表示し、コンソールに出力された速度レポートを読みます。
Travis CI ドキュメント - 環境変数
ステップ 1) phpunit.xml で SpeedTrap を有効にします。遅延レポートは、すべてのテスト スイートの実行中に出力されます。
<phpunit bootstrap="vendor/autoload.php"> ... <拡張機能> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </拡張機能> </phpunit>
ステップ 2) Travis CI での実行時にプロファイリングをオフにするために、 PHPUNIT_SPEEDTRAP="disabled"
を使用して.travis.yml
を構成します。
言語: phpphp: - 7.3環境: - PHPUNIT_SPEEDTRAP="無効"
ステップ 3) Travis CI ビルド出力を表示し、遅延レポートがコンソールに出力されないことを確認します。
遅いテストをたまにだけプロファイリングしたい場合に便利です。
ステップ 1) SpeedTrap を有効にするように phpunit.xml を設定しますが、次のようにPHPUNIT_SPEEDTRAP="disabled"
を設定して低速プロファイリングを無効にします。
<phpunit bootstrap="vendor/autoload.php"> ... <php> <env name="PHPUNIT_SPEEDTRAP" value="無効" /> </php> <拡張機能> <extension class="JohnKaryPHPUnitExtensionSpeedTrap" /> </拡張機能> </phpunit>
ステップ 2) コマンドラインからphpunit
実行する場合、次のように環境変数PHPUNIT_SPEEDTRAP="enabled"
を渡して、この実行に対してのみ速度プロファイリングを有効にします。
$ PHPUNIT_SPEEDTRAP=有効 ./vendor/bin/phpunit
Symfony Framework には symfony/phpunit-bridge パッケージが付属しています。このパッケージは独自のバージョンの PHPUnit をインストールし、プロジェクトのcomposer.json またはcomposer.lock ファイルで定義されている内容を無視します。コマンドls vendor/bin/.phpunit/
を使用して、インストールされる PHPUnit のバージョンを確認します。
symfony/phpunit-bridge を使用すると、phpunit のインストール中に環境変数SYMFONY_PHPUNIT_REQUIRE
追加の依存関係を定義できます。
スクリプト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 は、遅いテストに関するフィードバックを表示する RSpec の--profile
オプションからインスピレーションを受けました。
phpunit-speedtrap は、MIT ライセンスの下で利用できます。