プロジェクト情報:
Stopwatch は、パフォーマンス分析に不可欠なphpunit/phpunit
拡張機能です。
テスト実行中のコードの実行時間と呼び出し頻度に関する貴重な洞察を得ることができます。この拡張機能は、コードのパフォーマンス分析を向上させるように設計されています。マークされたコードセグメントの実行時間と頻度を追跡して、パフォーマンスのボトルネックに正確に対処します。パフォーマンスのボトルネック (データベースのクリーンアップやセットアップなど) を特定したり、単に時間をかけて監視したりできます。この拡張機能は、各テストのストップウォッチ レポートと、テスト実行の終了時の概要レポートを生成します。
このプロジェクトは、 composer
パッケージと Phar アーカイブを提供します。
この拡張機能は、次のバージョンのphpunit/phpunit
と互換性があります。
phpunit/phpunit:^10.1.0
phpunit/phpunit:^11.0.0
コードにいくつかの測定ポイントを追加すると、拡張機能は監視を停止してそれらをカウントします。結果はテストごとに表示され、テスト実行の終了時に合計レポートとして表示されます。
単一のテスト クラスの出力の例を次に示します。
Stopwatch for TQTestsExampleSingleTest::testDataCalculation:
- TQTestingDatabase::deleteData 0.117secs ( 3x, Ø 0.04) TOTAL 327.026secs ( 184x, Ø 1.78)
- ...onmentTesting::cleanupInstance 0.259secs ( 1x, Ø 0.26) TOTAL 6.159secs ( 60x, Ø 0.10)
- TQTestingDatabase::import 7.889secs ( 11x, Ø 0.72) TOTAL 250.958secs ( 352x, Ø 0.71)
- Test 1.428secs ( 1x, Ø 1.43) TOTAL 1041.228secs ( 70x, Ø 14.87)
.
Stopwatch for TQTestsExampleSingleTest::testDataTransfer:
- TQTestingDatabase::deleteData 0.116secs ( 3x, Ø 0.04) TOTAL 327.142secs ( 187x, Ø 1.75)
- ...onmentTesting::cleanupInstance 0.256secs ( 1x, Ø 0.26) TOTAL 6.415secs ( 61x, Ø 0.11)
- TQTestingDatabase::import 7.573secs ( 11x, Ø 0.69) TOTAL 258.531secs ( 363x, Ø 0.71)
- Test 5.998secs ( 1x, Ø 6.00) TOTAL 1047.226secs ( 71x, Ø 14.75)
.
Stopwatch for TQTestsExampleSingleTest TearDown:
- TQTestingDatabase::deleteData 38.486secs ( 6x, Ø 6.41) TOTAL 365.511secs ( 190x, Ø 1.92)
- ...onmentTesting::cleanupInstance 0.256secs ( 1x, Ø 0.26) TOTAL 6.415secs ( 61x, Ø 0.11)
- TQTestingDatabase::import 7.573secs ( 11x, Ø 0.69) TOTAL 258.531secs ( 363x, Ø 0.71)
- Test 5.998secs ( 1x, Ø 6.00) TOTAL 1047.226secs ( 71x, Ø 14.75)
テスト実行の最後には、使用されたすべてのストップウォッチの概要が次のように表示されます。
Stopwatch TOTALS:
- Test TOTAL 1047.246secs ( 78x, Ø 13.43)
- TQTestingDatabase::deleteData TOTAL 365.511secs ( 190x, Ø 1.92)
- TQTestingDatabase::import TOTAL 258.531secs ( 363x, Ø 0.71)
- ...onmentTesting::cleanupInstance TOTAL 6.416secs ( 62x, Ø 0.10)
- TQProductionMonitoring::ping TOTAL 17.967secs ( 7x, Ø 2.57)
ストップウォッチはとても使いやすいです。必要なのは、測定したいコードを 1 行のコードで囲むだけです。
たとえば、テストがかなり遅いが、誰が原因かわからないとします。すべてのテストでデータベースのセットアップを実行する必要があるのではないかと思われます。疑わしいコード ブロックを次のようにラップするだけです。
Stopwatch:: start ( __METHOD__ );
self :: initializeDatabase (
$ db -> getConnection (),
... static :: createData ()
);
Stopwatch:: stop ( __METHOD__ );
テスト、セットアップ、ティアダウン、またはその他の関連メソッドがこのコードを実行すると、ストップウォッチはその実行時間とカウントをシームレスに測定し、テスト出力内に結果を表示します。
composer
を使用したインストール走る
composer require --dev teqneers/phpunit-stopwatch
teqneers/phpunit-stopwatch
composer
パッケージとしてインストールします。
最新リリースからphpunit-stopwatch.phar
をダウンロードします。
拡張機能がphpunit/phpunit
内の遅いテストを検出できるようにするには、拡張機能をブートストラップする必要があります。ブートストラップのメカニズムは、使用しているphpunit/phpunit
のバージョンによって異なります。
composer
パッケージとしてブートストラップする使用時に拡張機能をcomposer
パッケージとしてブートストラップするには
phpunit/phpunit:^10.0.0
phpunit/phpunit:^11.0.0
phpunit.xml
設定ファイルを調整し、
phpunit/phpunit:^10.1.0
のextensions
要素:^10.1.0phpunit/phpunit:^11.0.0
のextensions
要素:^11.0.0
+
+
+
test/Unit/
使用時に拡張機能を PHAR としてブートストラップするには
phpunit/phpunit:^10.1.0
phpunit/phpunit:^11.0.0
phpunit.xml
設定ファイルを調整し、
extensionsDirectory
属性とphpunit/phpunit:^10.0.0
のextensions
要素extensionsDirectory
属性とphpunit/phpunit:^11.0.0
のextensions
要素 + extensionsDirectory="directory/where/you/saved/the/extension/phars"
>
+
+
+
test/Unit/
これまでのところ、この拡張機能には構成設定はありません。
拡張機能をブートストラップすると、通常どおりテストを実行できます。例えば:
vendor/bin/phpunit
拡張機能がコード内のどこかで使用されると、レポートが表示されます。
このプロジェクトは MIT ライセンスを使用します。
このパッケージはergebnis/phpunit-slow-test-detector
からインスピレーションを得ています。