ただのやってみた系記事です。
要約
- CodeCovに登録する
- pythonを使っているなら、 pytest-cov 入れてカバレッジの結果ファイル出すようにする
- GitHub Actions でカバレッジを CodeCov に出すようにする
背景
画像を jpg, png -> WebP に変換する Command Line Interface なものを作ってるんですが(この変換に関しても何か書きたいが…)、まあなんかパス周りでバグっていたり、画像以外のものを変換せずにそのままコピーするようにしているんですが、どうもバグってるっぽい挙動をしているので、テストを追加しようと思いました。
ついでにテストを実行するなら GitHub Actions で自動テストしたいのと、カバレッジを出してみることにしました。
Python周りのあれこれ
Pipenv でやってますが、 pytest, pytest-cov を入れます。
pipenv install --dev pytest pytest-cov
あとはディレクトリなりをうまい感じに調整したり、 conftest.py とかを書いたり… と地道な活動をして、 pytest が実行できるようにします。
で、カバレッジを出すためにはこういう感じのコマンドを打ち込みます。
pipenv run pytest -v tests/ --cov=./ --cov-report=xml
これで .coverage
とか coverage.xml
ができます。
適宜 gitignore.io とかで python + Pycharm のテンプレ的な gitignore を追加して無駄なファイルをコミットしないようにしましょう。
CodeCov のあれこれ
CodeCov でアカウント登録が必要です。GitHub, BitBucket, Gitlab あたりで登録できそうな雰囲気なので、とりあえずよく使うホスティングサービスでログインすればよいんではないでしょうか。
で、リポジトリを選んで、発行されている Token をこぴっと来ます。
ちなみにこれを参考にしました。
GitHub Actions あれこれ
codecov/codecov-action: GitHub Action that uploads coverage to Codecov
用意されているので、最低限こう書くだけ。
- name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.xml env_vars: OS,PYTHON name: codecov-umbrella fail_ci_if_error: true verbose: true
GitHub Actions で動かすと、下記みたいなものが得られます。カバレッジ率、これはひどい(誠意努力します)
普段超テストをゴリゴリ書いているわけではないですが、もうちょっと努力のしようがありますねというお気持ちになりました。頑張ります。
まとめ
意外とコードカバレッジ表示させるのは簡単でした。むしろ python プロジェクトのパス解決の何かのほうがしんどかったです。PyCharm の補完が弱いときがあってほんと謎。
それと CI と連携して何かやるのがちょっと楽しくなってきました。もっと使いこなしたいですね。もう一個くらいネタがあるはずなので、それはその時にでも。