実行時にテスト名とテスト結果を取得したい。
スクリプトにメソッドがsetup
あります。tearDown
でsetup
、テスト名を取得するtearDown
必要があり、で、テスト結果とテスト実行時間を取得する必要があります。
これを行う方法はありますか?
実行時にテスト名とテスト結果を取得したい。
スクリプトにメソッドがsetup
あります。tearDown
でsetup
、テスト名を取得するtearDown
必要があり、で、テスト結果とテスト実行時間を取得する必要があります。
これを行う方法はありますか?
フックを使用してできます。
テストディレクトリに次のファイルがあります。
./rest/
├── conftest.py
├── __init__.py
└── test_rest_author.py
には、 、 のtest_rest_author.py
3 つの関数がありますが、 の結果と名前だけを表示したいのです。startup
teardown
test_tc15
test_tc15
conftest.py
まだファイルがない場合は作成し、これを追加します。
import pytest
from _pytest.runner import runtestprotocol
def pytest_runtest_protocol(item, nextitem):
reports = runtestprotocol(item, nextitem=nextitem)
for report in reports:
if report.when == 'call':
print '\n%s --- %s' % (item.name, report.outcome)
return True
フックpytest_runtest_protocol
は、例外のキャプチャやレポート フックの呼び出しなど、特定のテスト項目の runtest_setup/call/teardown プロトコルを実装します。テストが終了したときに呼び出されます(startup
またはteardown
またはあなたのテストのように)。
スクリプトを実行すると、テストの結果と名前が表示されます。
$ py.test ./rest/test_rest_author.py
====== test session starts ======
/test_rest_author.py::TestREST::test_tc15 PASSED
test_tc15 --- passed
======== 1 passed in 1.47 seconds =======
pytest hooksおよびconftest.pyのドキュメントも参照してください。
unittest.TestCase.id() これは、クラス名、メソッド名を含む完全な詳細を返します。これから、テストメソッド名を抽出できます。テストの実行中に例外があるかどうかを確認することで、結果を取得できます。テストが失敗した場合、sys.exc_info() が None を返す場合は例外が発生し、テストは成功し、それ以外の場合はテストは失敗します。