python

Python unittestでcoverageを使ってカバレッジを取得する方法

Tidelift

Pythonの標準でインストールされている単体テストフレームワークの『unittest』にはカバレッジを取得する機能がありません。

今回、『coverage』というパッケージをインストールすることで『unittest』でカバレッジを取得する方法を紹介します。

  • coverageのインストール方法
  • カバレッジレポートの出力方法

unittestでカバレッジを取得する前の準備

unittestは、Pythonインストール時点でインストールされているので改めてインストールする必要はありません。

coverageをインストール

coverageというパッケージをインストールします。

pip install coverage

unittestで単体テストコードを書く

unittestの本家を参考にunittestで単体テストを書いていきます。

test_unittest.pyというファイルを作成

test_unittest.pyというファイルに下記のソースコードを書きます。

ちなみにテスト用のファイルは、test_で始まることが多いです。

test_を目印にテストを実行するフレームワークが多い。また、人間が見てすぐに「テスト用のソースコードね」ってわかるためです。

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

unittestの実行

pythonコマンドでファイル名を指定することで実行できます。

python test_coverage.py

unittestの実行結果

$ python test_coverage.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

unittestでカバレッジを取得する

カバレッジを取得していきます。

単体テストを実行

coverageコマンドで単体テストを実行します。

coverage run test_coverage.py

coverageの実行結果

先ほど、unittestで実行した結果と変わりませんね。

$ coverage run test_coverage.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

カバレッジレポートを出力する

実行結果のレポートを出力します。

coverage report -m

カバレッジの取得結果

左から、Name(ファイル名)、Stmts(ステートメント数)、Miss(失敗数)、Cover(網羅率)となります。

ステートメントとは、実行可能なソースコードの行数です。

Name Stmts Miss Cover Missing
------------------------------------------------
test_coverage.py 14 0 100%

Python unittestでカバレッジを取得する方法のまとめ

『coverage』をインストールするだけで、カバレッジが取得できるようになりました。

ただ、2回コマンドを打たないとカバレッジが取得できないというのは非常にもどかしいです。

実行結果とカバレッジ両方が一気に取得できるフレームワークもあるので今後紹介できたらと思います。

 

 

 

ABOUT ME
アバター
ロッピー
コンサルタントから2018年にエンジニアに転向。年収400万円のサラリーマンエンジニアから、半年で月収100万円を稼ぐエンジニアになった。 Python、Golangなど単価の高い言語を得意とする。