[PHP] ゼロから始める PHPUnit + CI (3. コードカバレッジを計測しよう)
目次
- PHPUnit を導入しよう
- CI環境を導入しよう
- コードカバレッジを計測しよう(本記事)
はじめに
この記事の目的や環境情報は最初の記事を参照。
3. コードカバレッジを計測しよう
せっかくユニットテストとCI環境が整っていても、テストの網羅率が低いとほとんど意味をなさないし、網羅性を上げることがテストコードを書くモチベーションアップの一環になったりする(100%にしたほうがいいって話じゃない)。
今回は Coveralls というサービスを利用して、カバレッジレポートを表示。
最終的に以下のような流れになる。
- GitHub に Push
- TravisCI で PHPUnit 実行
- PHPUnit で カバレッジレポートXMLを出力
- TravisCI 終了時に Coveralls のAPIに対してレポートXMLを送信
3.1 ローカルにレポートを出力しよう
まずはカバレッジレポートってどんなん?ってことで前段としてローカルに出力してみる。
Xdebugの導入
PHPUnit でカバレッジの計測には Xdebug 拡張が必要になる。
インストール方法は各環境で違うので割愛。
$ php -v
PHP 7.1.0 (cli) (built: Dec 2 2016 05:24:39) ( NTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
こんな感じで with Xdebug と出てくればOK。
設定ファイルに追記
phpunit.xml.dist | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 931bdfb..864be6f 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -5,4 +5,14 @@
<testsuite name="Application Test">
<directory>./tests/src/</directory>
</testsuite>
+
+ <filter>
+ <whitelist processUncoveredFilesFromWhitelist="true">
+ <directory suffix=".php">./src</directory>
+ </whitelist>
+ </filter>
+
+ <logging>
+ <log type="coverage-html" target="./report" lowUpperBound="35" highLowerBound="70"/>
+ </logging>
</phpunit>
設定ファイルに下記の内容を追記した。
- filter でカバレッジ対象のソースを ./src 以下に指定
- ./report に html形式でカバレッジレポートを出力 (その際カバレッジ35%以下を低カバレッジ、70%以上を高カバレッジと見なす)
詳細な書き方に関してはこちらを参照 → 付録C XML 設定ファイル
PHPUnitの実行
$ vendor/bin/phpunit
PHPUnit 6.4.3 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 205 ms, Memory: 4.00MB
OK (1 test, 1 assertion)
Generating code coverage report in HTML format ... done
今までとは違い、Generating code coverage report in HTML format ... done
と出力される。
reportディレクトリが出来上がっていると思うので、その中にある index.html をブラウザで開くと以下のようなレポートが閲覧できる。
3.2 Coverallsアカウントを登録しよう
GitHub にログイン
例のごとく GitHubアカウントで認証を行う。こちら → GitHub
Coveralls は Bitbuketにも対応してるみたい。
Coveralls にサインイン
Coveralls に移動し、右上のSIGN INを選択しサインインを完了させる。
GITHUBを選ぶ
リポジトリの登録
無事にサインインが済んだら今度は対象となるリポジトリを登録する。
左のペインからに ADD REPOS をクリックするとリポジトリ一覧が出てくる。
対象リポジトリを選んで、スイッチをONにする。(下記の画像はOFF)
ONするとDETAILボタンが出てくるので移動しておこう。
もう一度おさらいすると以下のような流れになる。
- GitHub に Push
- TravisCI で PHPUnit 実行
- PHPUnit で カバレッジレポートXMLを出力
- TravisCI 終了時に Coveralls のAPIに対してレポートXMLを送信
このうち 1 と 2 は既にできているので3から行っていく。
3.3 PHPUnit で カバレッジレポートXMLを出力しよう
COMMIT: 3.3 PHPUnit で カバレッジレポートXMLを出力
phpunit.xml.dist | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 864be6f..bee2939 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -13,6 +13,7 @@
</filter>
<logging>
- <log type="coverage-html" target="./report" lowUpperBound="35" highLowerBound="70"/>
+ <log type="coverage-clover" target="./report/clover.xml"/>
+ <!-- <log type="coverage-html" target="./report" lowUpperBound="35" highLowerBound="70"/> -->
</logging>
</phpunit>
ログの出力形式をXMLにして、ついでにもう不要なHTML形式をコメントアウト。
この状態で PHPUnit を実行してみる。
$ vendor/bin/phpunit
PHPUnit 6.4.3 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 131 ms, Memory: 4.00MB
OK (1 test, 1 assertion)
Generating code coverage report in Clover XML format ... done
report/clover.xml が出力されているはず。
3.4 TravisCI 終了時に Coveralls のAPIに対してレポートXMLを送信しよう
COMMIT: 3.4 TravisCI 終了時に Coveralls のAPIに対してレポートXMLを送信
APIにXMLを送信してくれる素晴らしいライブラリが存在するので、これを使う。
composer require --dev php-coveralls/php-coveralls
インストールしたら php-coveralls が読み込む設定ファイルを追加。
coverage_clover: report/clover.xml
json_path: report/coveralls-upload.json
php-coveralls は .coveralls.yml に記載された XMLファイルをパース、JSONを出力してアップロードするという流れでAPIを叩く。それぞれデフォルト設定があるので詳しくはライブラリのREADMEを参照。
最後に TravisCI の設定で php-coveralls を叩く処理を追記する。
.travis.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.travis.yml b/.travis.yml
index 818e947..cead344 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,3 +6,6 @@ php:
before_script:
- curl -s http://getcomposer.org/installer | php
- php composer.phar install
+
+after_success:
+ - vendor/bin/coveralls -v
この状態でPushし、しばらくすると Coveralls にカバレッジレポートが送信されている!
3.5 GitHubにCoverallsのバッチを貼ろう
COMMIT: 3.5 GitHubにCoverallsのバッチを貼ろう
この段階ではビルドしたブランチしか Coveralls に出てこないので、メインブランチにマージして再度CIを走らせる。
ビルドが完了したら再度 Coveralls に戻り、下記の画像の位置をクリック。
するとご丁寧なことにスニペットが何種類か出てくるので Markdown 形式をバッチに貼ろう。
一通り完成!
あとがき
とにかく敷居を下げることを目的にしたので、慣れてきたころに公式ドキュメントを読んでみてください。
この後この環境でTDDの解説みたいなのも書いてみようかな・・・
Author And Source
この問題について([PHP] ゼロから始める PHPUnit + CI (3. コードカバレッジを計測しよう)), 我々は、より多くの情報をここで見つけました https://qiita.com/PruneMazui/items/839b437f5e740c46ad09著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .