7

実行時にテスト名とテスト結果を取得したい。

スクリプトにメソッドがsetupあります。tearDownsetup、テスト名を取得するtearDown必要があり、で、テスト結果とテスト実行時間を取得する必要があります。

これを行う方法はありますか?

4

3 に答える 3

14

フックを使用してできます。

テストディレクトリに次のファイルがあります。

./rest/
├── conftest.py
├── __init__.py
└── test_rest_author.py

には、 、 のtest_rest_author.py3 つの関数がありますが、 の結果と名前だけを表示したいのです。startupteardowntest_tc15test_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のドキュメントも参照してください。

于 2015-03-19T09:02:57.220 に答える
1

unittest.TestCase.id() これは、クラス名、メソッド名を含む完全な詳細を返します。これから、テストメソッド名を抽出できます。テストの実行中に例外があるかどうかを確認することで、結果を取得できます。テストが失敗した場合、sys.exc_info() が None を返す場合は例外が発生し、テストは成功し、それ以外の場合はテストは失敗します。

于 2013-01-05T19:28:47.340 に答える