Help us understand the problem. What is going on with this article?

CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ④(Coverage Reportを出力する)

概要

ci-phpunit-testで、色々と実装してきたphpunitのテストコードに対して、Coverage Reportを出力していきたいと思います。

phpunit実行時に出ていた出力内容で

以下のようにphpunitを実行すると、Warningが出ておりました。

# cd /var/www/html/codeigniter3/application/tests
# ../../vendor/bin/phpunit --testdox

PHPUnit 9.4.0 by Sebastian Bergmann and contributors.

Warning:       No code coverage driver available
Warning:       Your XML configuration validates against a deprecated schema.
Suggestion:    Migrate your XML configuration using "--migrate-configuration"!

Gmo_api_model_test
 ✔ G m o決済リンク urlが正常に取得できること
 ✔ G m o決済リンク url取得失敗の詳細が exceptionで伝播されること
 ✔ G m oカード会員編集 urlが正常に取得できること

Gmo_result_notification_logs_model_test
 ✔ ログの登録が正常に完了すること
 ✔ 登録済みのログが削除できること
 ✔ 登録した順序の降順で取得できること

Time: 00:00.047, Memory: 8.00 MB

OK (6 tests, 29 assertions)

No code coverage driver availableは、xdebugが使えるようになっていないことを表しているようです。

xdebugをインストール

# dnf install php74-php-pecl-xdebug

以下を追記

/etc/php.ini
[xdebug]
zend_extension=xdebug

これでphpunitを実行すると以下のエラーが発生するようになってしまった。

A PHP Error was encountered

Severity:    Core Warning
Message:     Failed loading Zend extension 'xdebug' (tried: /usr/lib64/php/modules/xdebug (/usr/lib64/php/modules/xdebug: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/xdebug.so (/usr/lib64/php/modules/xdebug.so: cannot open shared object file: No such file or directory))
Filename:    Unknown
Line Number: 0

Backtrace:

どうやら、先ほどphp.iniに追記したzend_extension=xdebugという設定が、xdebug.soを参照する設定のようで、そのxdebug.soファイルが見つからなくてエラーになっているようです。
私の環境はphp:remi-7.4を利用しているため、標準リポジトリからセットアップされるphpのモジュールとはディレクトリ構成が違うようです。

xdebug.soがどこにいるのか探してみます。

# find / -name "xdebug.so"
/opt/remi/php74/root/usr/lib64/php/modules/xdebug.so

上記フォルダに存在しているようなので、php.iniファイルを以下のように修正します。

/etc/php.ini
[xdebug]
;zend_extension=xdebug
zend_extension="/opt/remi/php74/root/usr/lib64/php/modules/xdebug.so"

再度phpunitを実行するとエラーが解消され、以下のような出力内容に変わりました。

# ../../vendor/bin/phpunit --testdox
PHPUnit 9.4.0 by Sebastian Bergmann and contributors.

Warning:       Your XML configuration validates against a deprecated schema.
Suggestion:    Migrate your XML configuration using "--migrate-configuration"!

Gmo_api_model_test
 ✔ G m o決済リンク urlが正常に取得できること
 ✔ G m o決済リンク url取得失敗の詳細が exceptionで伝播されること
 ✔ G m oカード会員編集 urlが正常に取得できること

Gmo_result_notification_logs_model_test
 ✔ ログの登録が正常に完了すること
 ✔ 登録済みのログが削除できること
 ✔ 登録した順序の降順で取得できること

Time: 00:00.294, Memory: 16.00 MB

OK (6 tests, 29 assertions)

Generating code coverage report in Clover XML format ... done [00:00.297]

Generating code coverage report in HTML format ... done [00:00.110]

この状態でWebアプリにアクセスすると、設定した内容が反映されないみたいなので、php-fpmのサービスは再起動しておきます。

# systemctl restart php-fpm

上記までの対応でCoverage Reportが無事出力されたようです。
出力先は以下になってました。

/var/www/html/codeigniter3/application/tests/build/coverage

Coverage Reportをブラウザで見れるようにする

出力されたCoverage ReportはHTML形式でも出力されていますので、ブラウザで見れるようにします。

# cd /var/www/html/codeigniter3/public/
# ln -s /var/www/html/codeigniter3/application/tests/build/coverage coverage

シンボリックリンクしか思いつかなかったので、閲覧可能な状態にしてブラウザでアクセス

https://tk2-999-99999.vs.sakura.ne.jp/coverage/

スクリーンショット 2020-10-11 18.13.41.png

Dashboardはこんな感じ

screencapture-tk2-253-36402-vs-sakura-ne-jp-coverage-dashboard-html-2020-10-11-18_15_08.png

これでどの程度テストコードが実装できたのかビジュアル化できました。
カバレッジ100%目指す!なんてことはしませんが、これでテストコードを実装するモチベーションが上がってきたんで、これからちょいちょいテストコード作って、ある程度満足したら続きの機能を作り込んで行こうかなと思います。

後日追記

以下のように--testdox-htmlのパラメータを指定することで、テストクラスに定義したfunctionの名前がリスト表示されます。
簡単なテスト仕様書(テストリスト)としては利用できるかなと。

# ../../vendor/bin/phpunit --testdox --testdox-html /var/www/html/codeigniter3/public/testdox/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away