テストの実行

Nette Tester の最も目に見える部分は、コマンドラインからのテストランナーです。すべてのテストを個別のプロセスとして自動的に実行し、複数のスレッドで並行して実行するため、非常に高速で堅牢です。また、いわゆるウォッチモードで自己実行することもできます。

テストランナーはコマンドラインから呼び出します。パラメータとして、テストを含むディレクトリを指定します。現在のディレクトリの場合は、ドットを入力するだけです。

vendor/bin/tester .

テストランナーは、指定されたディレクトリとすべてのサブディレクトリを検索し、テスト(*.phpt および *Test.php ファイル)を探します。同時に、それらの アノテーション を読み取り、評価して、どのテストをどのように実行するかを判断します。

次に、テストを実行します。テストの実行中、結果を文字として継続的にターミナルに出力します。

  • . – テスト合格
  • s – テストスキップ (skipped)
  • F – テスト失敗 (failed)

出力は次のようになります。

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.5.2

Note: No php.ini is used.
PHP 8.3.2 (cli) | php -n | 8 threads

........s..........................

OK (35 tests, 1 skipped, 1.7 seconds)

繰り返し実行すると、前回の実行で失敗したテストが最初に実行されるため、エラーを修正できたかどうかをすぐに確認できます。

テストが失敗しなかった場合、Tester のリターンコードはゼロです。それ以外の場合、リターンコードはゼロ以外です。

Tester は php.ini なしで PHP プロセスを実行します。詳細は Vlastní php.ini セクションを参照してください。

コマンドラインパラメータ

すべてのコマンドラインオプションの概要は、パラメータなしで Tester を実行するか、-h パラメータを使用して取得できます。

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.5.2

Usage:
    tester [options] [<test file> | <directory>]...

Options:
    -p <path>                    Specify PHP interpreter to run (default: php).
    -c <path>                    Look for php.ini file (or look in directory) <path>.
    -C                           Use system-wide php.ini.
    -d <key=value>...            Define INI entry 'key' with value 'value'.
    -s                           Show information about skipped tests.
    --stop-on-fail               Stop execution upon the first failure.
    -j <num>                     Run <num> jobs in parallel (default: 8).
    -o <console|console-lines|tap|junit|log|none>  (e.g. -o junit:output.xml)
                                 Specify one or more output formats with optional file name.
    -w | --watch <path>          Watch directory.
    -i | --info                  Show tests environment info and exit.
    --setup <path>               Script for runner setup.
    --temp <path>                Path to temporary directory. Default by sys_get_temp_dir().
    --colors [1|0]               Enable or disable colors.
    --coverage <path>            Generate code coverage report to file.
    --coverage-src <path>        Path to source code.
    -h | --help                  This help.

-p <path>

テストの実行に使用する PHP バイナリを指定します。デフォルトは php です。

tester -p /home/user/php-7.2.0-beta/php-cgi tests

-c <path>

テスト実行時に使用する php.ini を指定します。デフォルトでは、php.ini は使用されません。詳細は Vlastní php.ini セクションを参照してください。

-C

システム全体の php.ini が使用されます。UNIX では、関連するすべての INI ファイル /etc/php/{sapi}/conf.d/*.ini も使用されます。詳細は Vlastní php.ini セクションを参照してください。

-d <key=value>

テスト用の PHP 設定ディレクティブの値を設定します。パラメータは複数回使用できます。

tester -d max_execution_time=20

-s

スキップされたテストに関する情報が表示されます。

--stop-on-fail

Tester は最初の失敗したテストでテストを停止します。

-j <num>

実行するテストの並列プロセスの数を指定します。デフォルト値は 8 です。すべてのテストを直列に実行したい場合は、値 1 を使用します。

-o <console|console-lines|tap|junit|log|none>

出力形式を設定します。デフォルトはコンソール形式です。出力が書き込まれるファイル名を指定できます(例:-o junit:output.xml)。-o オプションを複数回繰り返して、一度に複数の形式を生成できます。

  • console: デフォルト形式と同じですが、この場合 ASCII ロゴは表示されません。
  • console-lines: console に似ていますが、各テストの結果は追加情報とともに別の行に表示されます。
  • tap: 機械処理に適した TAP 形式
  • junit: JUnit XML 形式。これも機械処理に適しています。
  • log: テスト実行の出力。失敗したテスト、スキップされたテスト、および成功したテストすべて。
  • none: 何も出力されません。

-w | --watch <path>

テストが完了した後、Tester は終了せず、実行を続け、指定されたディレクトリ内の PHP ファイルを監視します。変更があると、テストを再度実行します。パラメータは、複数のディレクトリを監視したい場合に複数回使用できます。

ライブラリのリファクタリングやテストのデバッグに役立ちます。

tester --watch src tests

-i | --info

テストの実行環境に関する情報を表示します。例:

tester -p /usr/bin/php7.1 -c tests/php.ini --info

PHP binary:
/usr/bin/php7.1

PHP version:
7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli)

Code coverage engines:
(not available)

Loaded php.ini files:
/var/www/dev/demo/tests/php.ini

PHP temporary directory:
/tmp

Loaded extensions:
Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...

--setup <path>

Tester は起動時に指定された PHP スクリプトを読み込みます。その中で、変数 Tester\Runner\Runner $runner が利用可能です。ファイル tests/runner-setup.php に次の内容が含まれていると仮定します。

$runner->outputHandlers[] = new MyOutputHandler;

Tester を実行します:

tester --setup tests/runner-setup.php tests

--temp <path>

Tester の一時ファイル用のディレクトリへのパスを設定します。デフォルト値は sys_get_temp_dir() によって返されます。デフォルト値が無効な場合は、警告が表示されます。

どのディレクトリが使用されているかわからない場合は、--info パラメータを指定して Tester を実行します。

--colors 1|0

デフォルトでは、Tester はカラーターミナルを検出し、出力を色付けします。このオプションは自動検出を上書きします。システム環境変数 NETTE_TESTER_COLORS を使用して、グローバルに色付けを設定できます。

--coverage <path>

Tester は、テストがソースコードのどれだけをカバーしているかの概要を示すレポートを生成します。このオプションには、インストールされた PHP 拡張機能 Xdebug または PCOV、あるいはより高速な PHP 7 と PHPDBG SAPI が必要です。ターゲットファイルの拡張子は、その形式を決定します。HTML または Clover XML のいずれかです。

tester tests --coverage coverage.html  # HTML レポート
tester tests --coverage coverage.xml   # Clover XML レポート

メカニズム選択の優先順位は次のとおりです。

  1. PCOV
  2. PHPDBG
  3. Xdebug

PHPDBG を使用する場合、大規模なテストではメモリ不足のためにテストが失敗することがあります。コードカバレッジ情報の収集はメモリを大量に消費します。この場合、テスト内で Tester\CodeCoverage\Collector::flush() を呼び出すと役立ちます。収集されたデータをディスクに書き込み、メモリを解放します。データ収集が実行されていない場合、または Xdebug が使用されている場合、呼び出しは何の効果もありません。

コードカバレッジの HTML レポートのサンプル

--coverage-src <path>

--coverage オプションと同時に使用します。<path> は、レポートが生成されるソースコードへのパスです。繰り返し使用できます。

カスタム php.ini

Tester は -n パラメータを指定して PHP プロセスを実行します。これは、php.ini が読み込まれないことを意味します。UNIX では、/etc/php/conf.d/*.ini からのものも読み込まれません。これにより、テスト実行のための同一の環境が保証されますが、システム PHP によって通常読み込まれるすべての PHP 拡張機能も無効になります。

システム php.ini ファイルの読み込みを維持したい場合は、-C パラメータを使用します。

テストに拡張機能や特別な INI 設定が必要な場合は、テストとともに配布される独自の php.ini ファイルを作成することをお勧めします。次に、-c パラメータを指定して Tester を実行します。たとえば、tester -c tests/php.ini tests のようにします。ここで、INI ファイルは次のようになります。

[PHP]

extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll

memory_limit=512M

システム php.ini を使用して UNIX で Tester を実行する場合、たとえば tester -c /etc/php/cli/php.ini/etc/php/conf.d/*.ini から他の INI を読み込みません。これは Tester ではなく PHP の機能です。