New in version 2.0.
Python 2.5 か、それ以上のバージョンを使っているなら、コマンドラインから Python インタープリターでテストを実行できます:
python -m pytest [...]
これは直接的にコマンドラインスクリプト py.test [...] を実行するのと同じです。
py.test --version # pytest がインポートされた場所を表示
py.test --fixtures # 利用できる組み込みの関数引数を表示
py.test -h | --help # コマンドラインと設定ファイルオプションのヘルプを表示
最初 (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 のディレクトリ配下にある全てのテストを実行
トレースバック表示を変更する例です:
py.test --showlocals # トレースバックのローカル変数を表示
py.test -l # トレースバックのローカル変数を表示 (短いオプション)
py.test --tb=long # デフォルトの詳細なトレースバック形式
py.test --tb=native # Python 標準ライブラリの形式
py.test --tb=short # 短いトレースバック形式
py.test --tb=line # 失敗したテストを1行表示
Python には PDB という組み込みの Python デバッガーが付属しています。 py.test は、コマンドラインオプションで PDB プロンプトを起動できます:
py.test --pdb
このオプションは、テストが失敗したときに Python デバッガーを起動します。多くの場合、特定のエラー状況を把握するのに最初に失敗したときのみデバッガーを起動したいはずです:
py.test -x --pdb # 最初にテストが失敗したときに PDB を起動してテストセッションを終了
py.test --pdb --maxfail=3 # 最初の 3 回の失敗に対して PDB を起動
ブレークポイントを設定して pdb.set_trace() を行いたいなら、ヘルパー関数を使えます:
import pytest
def test_function():
...
pytest.set_trace() # PDB デバッガーを起動してトレースする
以前のバージョンでは、コマンドラインから py.test -s で標準出力の取得を無効にした場合のみ、PDB トレースが可能でした。
Hudson やその他の継続的インテグレーションサーバーで読み込める結果ファイルを作成するには、次のように実行します:
py.test --junitxml=path
path に XML ファイルが作成されます。
コンピューターが読める平文の結果ファイルを作成するには、次のようにします:
py.test --resultlog=path
path に作成されたファイルがあります。そういったファイルは、例えば PyPy-test で複数バージョンでのテスト結果を表示するのに使われます。
テストが失敗する毎に URL を作成します:
py.test --pastebin=failed
これはリモートの Paste サービスへテストの実行情報を投稿して、失敗したテスト毎に URL を提供します。特定のエラーのみを投稿したい場合、普通にテストを選択するか、例えば -x を追加します。
全てのテストセッションログに対して1つの URL を作成します:
py.test --pastebin=all
いまのところは、http://paste.pocoo.org サービスへのペーストのみが実装されています。
New in version 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