こんにちは、kotaです。
最近Pythonでのユニットテストを行うようになりまして、何かいいテストランナーはないのかなと調べた結果、出力がわかりやすいpytestを使い始めました。
今回は、pytestの導入方法と、pytestでカバレッジを取得する方法、コードの変更を自動で検出してテストを再実行する方法を書きます。
1. 導入方法
まずpytestはpipでインストールします。
pip install pytest
pytestだけでは、カバレッジの取得等はできないのでpytestのプラグインもインストールします。
テストカバレッジの取得にはpytest-covを使い、自動でテストを再実行させるにはpytest-xdistを使います。
これらのプラグインもpipでインストールできます。
pip install pytest-cov pip install pytest-xdist
pytestのプラグインは他にもたくさんありますが、今回はこの2つの使い方だけを説明します。
興味がある方は、記事の最後にプラグインがまとまったサイトのリンクを載せるのでそちらをご覧下さい。
2. テストの実行
テストの実行はコマンドラインから行います。
py.test [...]
具体的には以下のようにテストの対象を指定します。
py.test test_mod.py # モジュール内のテストを実行 py.test somepath # 指定したパスの全てのテストを実行 py.test -k string # string を含む名前をもつテストのみを実行
もし何も指定しなければ、カレントディテクリ配下にある全てのテストを実行します。
テストの対象となるのはtest_*.py や*_test.pyという名前のファイルやtest_から始まる関数等です。
3. オプションの指定
カバレッジの取得やテストの再実行などはオプションで指定します。
py.test -f [...] # テスト対象に変化がある場合、自動的にテストを再実行 py.test --cov=[...] [...] # cov=[...] には、カバレッジを取得したい対象を指定、その後にテストの対象を指定 py.test --cov-report=html --cov=[...] [...] # カバレッジをhtml形式で出力
これ以外にも、様々なオプションがありますが、毎回指定するオプションがあればpytest.iniというファイルに以下のように記述することで、オプションの入力を省略できます。
[pytest] addopts = --cov-report=html
短いですが、こんな感じで導入できるのと、unittestやnoseで書いたユニットテストにもpytestは使えるので、新しくどのテストツールを使おうか迷った時には一度試しに使ってみるのもいいのではないでしょうか。
最後に、参考にしたサイトを紹介します。
- pytest のプラグイン(英語)
pytest Plugin Compatibility http://plugincompat.herokuapp.com - pytest に関する日本語のドキュメント
pytest ドキュメント http://pytest.org/latest-ja/contents.html - テストツールの紹介(英語)
PythonTestingToolsTaxonomy – Python Wiki https://wiki.python.org/moin/PythonTestingToolsTaxonomy