4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SonarQubeでpythonのテストカバレッジを出力

Last updated at Posted at 2019-02-03

本記事の内容

  • MacでSonarQube構築する手順
  • SonarQubeでpythonのunittestカバレッジ出力する手順

環境

  • docker-compose(本記事ではバージョン 1.23.2)
  • Homebrew(本記事ではバージョン 2.0.0)
  • python(本記事ではバージョン 3.5.2)

SonarQube構築手順

docker-composeでSonarQubeの環境を構築する

$ ls
docker-compose.yml

$ docker-compose up

Homebrewでsonar-scannerをインストール

  • 以下のコマンドを実行し、sonar-scannerをインストールする
$ brew install sonar-scanner

SonarQubeでpythonのunittestカバレッジ出力する手順

SonarQubeの設定

  • http://localhost:9000 の画面右上の「Log in」をクリックし、ログインする(id,パスワードは両方とも"admin")

sonarqube2.png

  • ログインするとtoken名を聞かれるので入力。入力後tokenが発行されるのでどこかに記録しておく。

sonarqube3.png

  • 主なプログラム言語、OS、プロジェクトキーを聞かれるので入力し、Doneボタンをクリック。その後画面右下の「Finish」をクリック。

sonarqube4.png

  • 画面上部にある「Quality Profiles」をクリックし、一覧からpythonの項目を探してコピーする。コピー時にプロファイル名を聞かれるので入力。

sonarqube5.png

  • 画面上部にある「Rules」をクリック、画面左側に言語一覧が表示されるのでpythonを選択。画面上部の「bulk Change」>「Activate in ...」をクリックし設定を有効にする。以上でSonarQubeの設定は完了。

sonarqube6.png

pythonカバレッジ出力

SonarPythonはcoverage.pyを使った出力をサポートしている。今回はunittestで出力した結果をcoverage.pyでカバレッジをxml形式で出力し、それをSonarQubeで出力する。

  • coverage.pyをインストール
pip3 install coverage
  • 今回は以下のpythonファイルを用意
$ ls
test_hoge.py            hoge.py

$ cat hoge.py 
class Hoge:
    def plus(self, a, b):
        return a + b
 
    def minus(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

$ cat test_hoge.py 
import unittest
from hoge import Hoge 
 
class TestHoge(unittest.TestCase):
    def test_plus(self):
        h = Hoge()
        a = h.plus(1, 2)
        self.assertEqual(a, 3)

    def test_minus(self):
        h = Hoge()
        a = h.minus(3, 2)
        self.assertEqual(a, 1)
        
if __name__ == "__main__":
    unittest.main()
  • 以下のコマンドを実行しカバレッジを出力し、coverage.xmlを作成。
$ coverage erase
$ coverage run test_hoge.py 
$ coverage xml -i

sonar-scannerを実行

  • pythonファイルのあるディレクトリ内にsonar-project.propertiesを作成。
$ ls
coverage.xml			sonar-project.properties
hoge.py				test_hoge.py
  • 設定は以下のように記載
$ cat sonar-project.properties 
sonar.projectKey=sample-test
sonar.sources=. 
sonar.exclusions=**/test_*.py
sonar.host.url=http://localhost:9000 
sonar.login={メモしたtokenを記載}
sonar.language=py
sonar.python.coverage.reportPath=coverage.xml
  • sonar-project.propertiesのあるディレクトリ内でsonar-scannerを実行。カバレッジ結果が出力される。
$ sonar-scanner

sonarqube7.png

参考

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?