猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

django-nose を使って django のテスト結果を XML で出力する

f:id:yoshiki_utakata:20181208115631j:plain

django-nose とは

  • Python で Web 開発をする時に Django フレームワークを使うことが多い
  • CI 環境として CircleCI を使うことが多い

ということで、Django のテストを CircleCI で実行することは多い。

CI でテストを回す時は

  • テスト結果を JUnit XML と呼ばれる XML の形式で出力し、
  • それを CircleCI などに読み込ませる

ことで、「どのテストが落ちたのか」を一覧で見られたりする。

CircleCI にも「テストメタデータ収集」として説明がある。

これによると

Django は、django-nose テストランナーを使用して設定する必要があります。

とある。

django-nose は、 Django のテスト結果を XML で出力してくれるライブラリである。

今回はこのライブラリを Django に設定する

django-nose のインストール

pipでインストールするだけでよい。

pip install django-nose

Django や Python の対応バージョンはリポジトリの README に書かれているが、 大体のバージョンに対応しているので、基本は最新版を入れておけば問題ない。

この記事執筆時の最新版は v1.4.6 である。バージョン一覧は下記ページで見られる。

django-nose を Django に読み込ませて、XMLを出力させる

テスト結果 XML を出力させるには、 Django の settings.py を修正する必要がある。

INSTALLED_APPS

settings.pyINSTELLED_APPSdjango_nose を追加する。

INSTALLED_APPS = [
    ...
    'django_nose',
    ...
]

TEST_RUNNER

settings.pyTEST_RUNNER という設定を追加し、 django_nose.NoseTestSuiteRunner を指定する。

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

NOSE_ARGS

settings.pyNOSE_ARGS で、テスト実行時の引数を指定する。 ここで、XML出力先などを指定する。

  • --with-xunit を設定することで XML ファイルが出力される
  • --xunit-file を設定することで、XML が指定したファイルに出力される
NOSE_ARGS = [
    '--with-xunit',
    '--xunit-file=result/unittest.xml',
]

以上

これで、テスト結果が出力された先を CircleCI に教えてあげる。 これは、最初に紹介した CircleCI のドキュメントを参考にしてください。

また、CircleCI でなくても、Jenkins などでも同様にテストメタデータの収集が可能です。