CodecovでPythonコードリポジトリのコードカバレッジを継続的に計測する

By raimon, 2016-01-17(日), in category Python

CI, GitHub, Python

Codecovというサービスを利用すると、GitHubにホスティングしているGitリポジトリのコードカバレッジを継続的に計測し、次のようにバッジで表示できる。

GitHub READMEに埋め込んだ例

同種のCode coverage as a Service的なものでは、有名なサービスとしてCoverallsがある。

Travis CI連携済みのPythonプロジェクトでCodecovを利用

今回は技術書のサンプルコードを写経してコードカバレッジが取得できるようになっており、かつ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モジュールの組み込み

結論から言うと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連携しているとコミット毎にテストが書かれているステートメントと書かれていないステートメントをシンプルな色分けでレポートしてくれる

Codecovでのレポート画面

もちろん、Jenkinsでも充実したPluginエコシステムを利用して同様のレポートを取得・表示することは可能だが、個人のコード管理でそこまでCIサーバ運用に手間をかけられないのが実情である。

これだけの少ない省力で十分なレポートが得られるのであれば、やはり今後はCodecovのようなカジュアルに使えるコードカバレッジ計測サービスが主流になって行くと思われる。

なお本記事の冒頭に貼った画像で依存パッケージの更新状況を表している真ん中のバッジはRequires.ioというサービスで、同様のサービスとしてGemnasiumが有名だが、Requires.ioの方が git push した後に即時反映してくれるなど便利な印象である。PythonプロジェクトであればGemnasiumよりも良い選択肢になる。