Codecovというサービスを利用すると、GitHubにホスティングしているGitリポジトリのコードカバレッジを継続的に計測し、次のようにバッジで表示できる。
同種のCode coverage as a Service的なものでは、有名なサービスとしてCoverallsがある。
今回は技術書のサンプルコードを写経してコードカバレッジが取得できるようになっており、かつTravis CIでテストが自動的に回るように連携済みである既存のPythonプロジェクトに対してCodecovとの連携を組み込んでみた。
# このカバレッジをCodecovで計測したい
$ py.test --doctest-modules --pep8 -v --cov=bankaccount --cov=myview --cov=utility
----------------------------------------- coverage: platform linux2, python 2.7.9-final-0 ------------------------------------------
Name Stmts Miss Cover
------------------------------------
bankaccount.py 29 2 93%
myview.py 15 2 87%
utility.py 5 0 100%
------------------------------------
TOTAL 49 4 92%
結論から言うとCodecovサービスと連携してPythonのコードカバレッジを計測するのは非常に簡単で、codecovモジュールをプロジェクトに依存に追加し、Travis CIの after_success
フックで呼ぶようにしておくだけである。
設定のYAML全体は以下の通り。
language: python
python:
- "2.7"
install:
- pip install -r tests-requirements.txt
script:
py.test --doctest-modules --pep8 -v --cov=bankaccount --cov=myview --cov=utility
after_success:
codecov
Codecov連携するためのコミット差分を見ても、ほんの少しの変更で対応できている事が分かる。
Codecov連携しているとコミット毎にテストが書かれているステートメントと書かれていないステートメントをシンプルな色分けでレポートしてくれる。
もちろん、Jenkinsでも充実したPluginエコシステムを利用して同様のレポートを取得・表示することは可能だが、個人のコード管理でそこまでCIサーバ運用に手間をかけられないのが実情である。
これだけの少ない省力で十分なレポートが得られるのであれば、やはり今後はCodecovのようなカジュアルに使えるコードカバレッジ計測サービスが主流になって行くと思われる。
なお本記事の冒頭に貼った画像で依存パッケージの更新状況を表している真ん中のバッジはRequires.ioというサービスで、同様のサービスとしてGemnasiumが有名だが、Requires.ioの方が git push
した後に即時反映してくれるなど便利な印象である。PythonプロジェクトであればGemnasiumよりも良い選択肢になる。