PHP
PHPUnit
EC-CUBE
phpdbg
EC-CUBE4

PHP でカバレッジを出すなら phpdbg

ユニットテストの評価に、コードカバレッジを使用することは、よくあると思います。
従来より、 PHPUnit にはコードカバレッジ解析機能が実装されており、 HTML をはじめとするいくつかの形式で、レポートを出力可能です。

PHP5 では、 xdebug が提供するステートメントカバレッジ機能が利用されてきましたが、これが大変遅く、1100 Assertions ほどの EC-CUBE3 のカバレッジを出力するまで、2時間以上かかります。
しかも、速い CPU にしても大して速くならないのです。
Windows 環境では特に遅くなるらしく、6時間くらいかかります。

PHP7 + PHP_CodeCoverage 2.2 からは、 phpdbug が利用できるようになりました。

HTML のレポートを出力する場合は、以下のように実行します。

phpdbg -qrr path/to/phpunit --coverage-html <output dir>

xdebug では 2時間以上かかっていたのが、 phpdbg では、なんと 6分程度で終わりました!

Time: 6.01 minutes, Memory: 218.00Mb

レポートも、 xdebug と同じように出力できます。

キャプチャ.PNG

Coveralls.io で、こんなレポートも作成できます。

ただ、 xdebug では正常だったテストがいくつかエラーになってしまう場合があるようですが、 PHP7 のバージョンアップに伴い改善されています。
完璧とは言えませんが、カバレッジレポートを出すくらいでしたら大きな支障は無いと思います。

Too many open files と言われる時は

大きめのプロジェクトで phpdbg を実行すると、 Too many open files のエラーとなってしまう。これを回避するには phpdbg を Docker Container 経由で実行すると良い。

Travis-CI では ulimit -n 30000 の制限がかかっているが、 Docker Container では ulimit -n 524288 まで使用可能

docker run -v "$PWD":/usr/src/myapp:cached -w /usr/src/myapp --rm nanasess/phpdbg phpdbg -qrr -dmemory_limit=-1 ./path/to/bin/phpunit --coverage-clover=coverage.clover

Dockerfile はこちら
https://github.com/nanasess/phpdbg

See Also