CUBE SUGAR STORAGE

技術系のことかきます。
Recent Tweets @

カバレッジというのはテストがテスト対象のコードをどれだけ網羅しているかをコード全体に対する割合で表したものをいう。 この数値を確認することで、そのコードがどれだけテストされているのかを把握できる。 カバレッジと一口に言っても C0 とか C1 とか色々あるみたいだけど、今回は特に気にしない。

Python には coverage というライブラリがあり、これでカバレッジを計測できる。 Nose はユニットテスト用のライブラリで、これは coverage と組み合わせて使うことができる。

例として Nose を使ってユニットテストを書いているプロジェクトがあるので、それを使う。 プロジェクトを GitHub からチェックアウトする。

$ git clone https://github.com/momijiame/cmonkey.git
$ cd cmonkey

プロジェクトで使うライブラリと coverage をインストールする。 ここでは Python 仮想環境を切っているが、気にしないのであればそのままでも良い。 ここまでは単なる下準備。
$ mkvirtualenv sandbox
$ pip install -r requirements.txt -r test-requirements.txt
$ pip install coverage

nosetests コマンドを使ってユニットテストを実行する。 カバレッジを計測するときは –with-coverage オプションをつける。 –cover-package オプションで測定対象のパッケージを指定する。
$ nosetests --with-xunit --with-coverage --cover-erase --cover-package=cmonkey --verbose
cmonkey.cmd.tests.Test_Main.test_exec_error_invalid_param ... ok
cmonkey.cmd.tests.Test_Main.test_get_client_cookie ... ok
cmonkey.cmd.tests.Test_Main.test_get_client_default ... ok
cmonkey.cmd.tests.Test_Main.test_get_client_integration ... ok
cmonkey.cmd.tests.Test_Main.test_get_client_signature ... ok
cmonkey.cmd.tests.Test_Main.test_parse_default_cookie ... ok
cmonkey.cmd.tests.Test_Main.test_parse_default_signature ... ok
cmonkey.cmd.tests.Test_Main.test_parse_error_invalid_t ... ok
cmonkey.cmd.tests.Test_Main.test_parse_error_required_a ... ok
cmonkey.cmd.tests.Test_Main.test_parse_error_required_p ... ok
cmonkey.cmd.tests.Test_Main.test_parse_error_required_s ... ok
cmonkey.cmd.tests.Test_Main.test_parse_error_required_u ... ok
cmonkey.tests.Test_CookieClient.test_login_digest ... ok
cmonkey.tests.Test_CookieClient.test_login_no_digest ... ok
cmonkey.tests.Test_CookieClient.test_request ... ok
cmonkey.tests.Test_IntegrationClient.test_request ... ok
cmonkey.tests.Test_SignatureBuilder.test_build ... ok
cmonkey.tests.Test_SignatureBuilder.test_contains_slash ... ok
cmonkey.tests.Test_SignatureClient.test_request ... ok

----------------------------------------------------------------------
XML: nosetests.xml
Name          Stmts   Miss  Cover   Missing
-------------------------------------------
cmonkey          96      8    92%   43, 46-49, 61, 82-83
cmonkey.cmd     112     21    81%   24-37, 46-48, 246-250, 253
-------------------------------------------
TOTAL           208     29    86%   
----------------------------------------------------------------------
Ran 19 tests in 0.152s

OK

測定結果を coverage コマンドで HTML 形式に変換する。 –omit オプションでユニットテストそのもののカバレッジは除外している。 測定結果は htmlconv ディレクトリ以下にできるのでブラウザで開く。
$ coverage html --include 'cmonkey/*' --omit '*/tests/*'
$ open htmlcov/index.html


image

各モジュールに対してカバレッジが表示される。

image

テストされていない箇所は赤く表示される。

ちなみに coverage の出力を XML 形式にすれば Jenkins の xunit plugin で取り込むこともできる。
  1. act2012bl reblogged this from momijiame
  2. momijiame posted this