新しいCode Climateのカバレッジレポートを試してみた

Code Climateのカバレッジレポートが新しくなっており、Public Beta版が展開されていたので試してみました。

以前は codeclimate-test-reporter を使用していましたが、ある日からcoverageが出力されなくなってしまったのがきっかけです。

本記事は 2017/08/10時点 Public Beta版の内容です。
正式リリースまでの間に仕様が変わる可能性がありますのでご注意下さい。

前提条件

試す環境

  • Python3.6
  • pytest, pytest-covを使用
  • TravisCIを使用

知識

以下の知識があることを前提とします。

  • GitHub + TravisCIでCI設定したことがある
  • Code Climateを使用したことがある

以前に Code Climateの記事を書いておりますので、宜しければご覧下さい。

GitHubでCode Climateを使ってみた

公式マニュアル

一度読んでおきましょう。

Configuring Test CoverageThe Code Climate test coverage reporter takes a supported test coverage report, transforms it into a generalized format, and submits it to the Code Climate API. It can also combine multiple test coverage report payloads created from parallel test processes within a parallelized CI build. Code Cl…

最低限理解が必要なポイントは以下3点です。

  • 使うreporterは https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 からDLできる
  • Pythonの場合 CoveragePyのフォーマットに準拠する
  • cc-test-reporter after-build --exit-code テスト実行の戻り値 でCode Climateにレポートを送信できる

設定変更

公式に記載されたrubyの例を参考に設定してみます。

Travis CI Test Coverage Example03 Workflow Working with Code Climate on pull requests and code merges.

私が使用したプロジェクトの .travis.yml は以下のようになっています。

env:
  global:
    - CC_TEST_REPORTER_ID=3e113735ca4277f3ea59db80fbdca7bceb293775290baa2db1fdc216ba940228
language:
  - python
matrix:
  include:
  - python: "3.6"
    env: SPHINX_TARGET="yes"
  - python: "3.7-dev"
install:
  - pip install -r requirements.txt
  - pip install pytest pytest-cov
  - '[ $SPHINX_TARGET ] && pip install sphinx || echo "Skip"'
before_script:
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
  - chmod +x ./cc-test-reporter
script:
  - py.test -vv --cov-report=xml --cov=. tests/
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
  - '[ $SPHINX_TARGET ] && (python -m doctest owlmixin/{__init__.py,transformers.py,owlcollections.py,owlenum.py} -v
) || echo "Skip doctest"'
  - '[ $SPHINX_TARGET ] && (cd docs && make html linkcheck) || echo "Skip sphinx build"'
notifications:
  slack:
    secure: S81vdt0O2Tyb5XD/wyTysjxzsh8eRBu55KF2n/zjScWxh78pVKUicfJd2CzrdsQ9EVdugY/E2PCyLDaX9jWRIyY0JiQ2e6Q62wcgAnZuTPIwPTcVBljd9I1ptuKKq5EWeeQKr2lnxA+EKUfjKZsflEMOKRmbQnVrJDOLADT7JoycuMn17mzobz9gu7hC9Haac+WUJxElhFZt/TpADEBVcn8bngMr3lg4eKgrodRvGi2BZCeTSCoq43O/HUaJ9o9URf/ifzvtrc2DJr1PSy3NRk5gMt++YpHTDDS2+zNzXgM1Ve0KvvrsdB3VRDx2ICWD5PV6oZmT9xcaKOKG5+VSAml9BMp2e4I0PQxkoaGCyi3bLhqLW/UQPcj2UIhIbRN8tTF0lMRMT7RbExjfD7MBcR4wRwIbWSZuVnJxLE50HFOkn+aZ2ZIJMObJbnkxwCoFz3Eikn0B/TkkvlVswvNQpitjwBBGVMiSUSHYcChsKf/mm7zmjzQgRoRzag+5XfACEm347PEyGooSt6g7Fehvtw/Zz2HeJwz5pCu/SUrdLexOPydwNQrX40yIYhD/PvA/pLnyrlOVa6W/1JBlOYuxfno1wWpLyxVoW0n+oRgKmMdMxAuteFiyeHEW1tLz8KUDbW64cEfQorvdtMYxKKY5ieGFppvA/R0XnifvveM7S9Y=

今回関係あるのは以下の部分です。

env:
  global:
    - CC_TEST_REPORTER_ID=3e113735ca4277f3ea59db80fbdca7bceb293775290baa2db1fdc216ba940228
install:
  - pip install pytest pytest-cov
before_script:
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
  - chmod +x ./cc-test-reporter
script:
  - py.test -vv --cov-report=xml --cov=. tests/
  - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT

env.global

CC_TEST_REPORTER_ID という環境変数を設定します。
これはGitHubのリポジトリに対して、1つ割り当てられます。

設定画面から確認しましょう。

install

今回はpytestとpytest-covを使いますのでインストールします。

before_script

curlでは、実行するreporterの最新版を取得して、cc-test-reporter という名前で保存しています。
次の行で実行権限を付けています。

script

1行目は py.test の実行です。

--cov-report=xml を忘れずに付けて下さい。pytest-covが出力するデフォルト形式 (.coverage) ではreporterが処理できません。
私はこの記載は公式ドキュメントやGitHubで見つけることができなかったためハマリました。

その後は、公式のUsage通りにreporterを実行してreportを送信します。
$TRAVIS_TEST_RESULT はTravisCIのビルド結果が格納される環境変数です。

テストコードを無視する

.coveragerc を作成し、以下の内容を記載します。

[run]
omit = tests/*

総括

Code Climateの新しいカバレッジレポート (Public Beta版) を試してみました。

正式版リリースまでに仕様変更などありましたら追記していきたいと思います。

コメントを残す