目次

前のトピックへ

インストールして始めよう

次のトピックへ

優れたインテグレーションプラクティス

使用方法とテスト実行

python -m pytest による pytest 呼び出し

バージョン 2.0 で追加.

Python 2.5 か、それ以上のバージョンを使っているなら、コマンドラインから Python インタープリターでテストを実行できます:

python -m pytest [...]

これは直接的にコマンドラインスクリプト py.test [...] を実行するのと同じです。

バージョン、オプション名、環境変数のヘルプを表示

py.test --version   # pytest がインポートされた場所を表示
py.test --funcargs  # 利用できる組み込みの関数引数を表示
py.test -h | --help # コマンドラインと設定ファイルオプションのヘルプを表示

最初 (または N 回) 失敗したときにテストを中止

最初 (N 回) 失敗したときにテストプロセスを中止するには、次のようにします:

py.test -x            # 最初に失敗したときに中止
py.test --maxfail=2   # 2 回失敗したときに中止

テストの指定と選択

次のようなテスト実行のオプションがあります:

py.test test_mod.py   # モジュール内のテストを実行
py.test somepath      # 指定したパスの全てのテストを実行
py.test -k string     # string を含む名前をもつテストのみを実行

‘pkg’ をインポートして、そのファイルシステム上の位置からテストを探して実行します:

py.test --pyargs pkg # pkg のディレクトリ配下にある全てのテストを実行

Python のトレースバック表示を変更

トレースバック表示を変更する例です:

py.test --showlocals # トレースバックのローカル変数を表示
py.test -l           # トレースバックのローカル変数を表示 (短いオプション)

py.test --tb=long    # デフォルトの詳細なトレースバック形式
py.test --tb=native  # Python 標準ライブラリの形式
py.test --tb=short   # 短いトレースバック形式
py.test --tb=line    # 失敗したテストを1行表示

失敗したときに PDB (Python デバッガー) を起動

Python には PDB という組み込みの Python デバッガーが付属しています。 py.test は、コマンドラインオプションで PDB プロンプトを起動できます:

py.test --pdb

このオプションは、テストが失敗したときに Python デバッガーを起動します。多くの場合、特定のエラー状況を把握するのに最初に失敗したときのみデバッガーを起動したいはずです:

py.test -x --pdb   # 最初にテストが失敗したときに PDB を起動してテストセッションを終了
py.test --pdb --maxfail=3  # 最初の 3 回の失敗に対して PDB を起動

set_trace() というブレークポイントの設定

ブレークポイントを設定して pdb.set_trace() を行いたいなら、ヘルパー関数を使えます:

import pytest
def test_function():
    ...
    pytest.set_trace()    # PDB デバッガーを起動してトレースする

以前のバージョンでは、コマンドラインから py.test -s で標準出力の取得を無効にした場合のみ、PDB トレースが可能でした。

テストの実行時間をプロファイリング

最も遅い 10 個のテスト一覧を取得するには、次のようにします:

py.test --durations=10

JUnitXML 形式のファイル作成

Hudson やその他の継続的インテグレーションサーバーで読み込める結果ファイルを作成するには、次のように実行します:

py.test --junitxml=path

path に XML ファイルが作成されます。

resultlog 形式のファイル作成

コンピューターが読める平文の結果ファイルを作成するには、次のようにします:

py.test --resultlog=path

path に作成されたファイルがあります。そういったファイルは、例えば PyPy-test で複数バージョンでのテスト結果を表示するのに使われます。

pocoo pastbin サービスにテスト結果を投稿

テストが失敗する毎に URL を作成します:

py.test --pastebin=failed

これはリモートの Paste サービスへテストの実行情報を投稿して、失敗したテスト毎に URL を提供します。特定のエラーのみを投稿したい場合、普通にテストを選択するか、例えば -x を追加します。

全てのテストセッションログに対して1つの URL を作成します:

py.test --pastebin=all

いまのところは、http://paste.pocoo.org サービスへのペーストのみが実装されています。

Python コードからの pytest 呼び出し

バージョン 2.0 で追加.

Python コードから直接 py.test を呼び出せます:

pytest.main()

これはコマンドラインから “py.test” を呼び出すように動作します。 SystemExit を発生させない代わりに終了コードを返します。次のようにオプションと引数を渡します:

pytest.main(['x', 'mytestdir'])

または、文字列で渡します:

pytest.main("-x mytestdir")

pytest.main に追加のプラグインを指定できます:

# myinvoke.py の内容
import pytest
class MyPlugin:
    def pytest_sessionfinish(self):
        print("*** test run reporting finishing")

pytest.main("-qq", plugins=[MyPlugin()])

このコードを実行すると MyPlugin が追加され、そのフックが実行されたことを表示します:

$ python myinvoke.py
collecting ... collected 0 items

 in 0.00 seconds
*** test run reporting finishing