3

私は py.test を使用していくつかのテストを作成しており、テストでは funcargs を使用しています。これらのファンカーグには、次のように conftest.py で定義された独自のセットアップとティアダウンがあります。

conftest.py:

def pytest_funcarg__resource_name(request):
  def setup():
    # do setup
  def teardown():
    # do teardown

私の問題は、誰かが CTRL+C を使用してテストの実行を停止すると、すべてが未処理のままになることです。フック pytest_keyboard_interrupt があることは知っていますが、そこから何をすべきかわかりません。

初心者の質問で申し訳ありません。

4

1 に答える 1

3

完全な例を提供していないため、何か不足している可能性があります。しかし、request.cached_setup() ヘルパーを使用して、どのように機能するかの例を次に示します。

def pytest_funcarg__res(request):
    def setup():
        print "res-setup"
    def teardown(val):
        print "res-teardown"
    return request.cached_setup(setup, teardown)

def test_hello(res):
    raise KeyboardInterrupt()

これを「py.test」で実行すると、次のようになります。

============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.2.5.dev4
plugins: xdist, bugzilla, pep8, cache
collected 1 items

tmp/test_keyboardinterrupt.py res-setup
res-teardown


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/home/hpk/p/pytest/tmp/test_keyboardinterrupt.py:10: KeyboardInterrupt

これは、テストの実行中に KeyboardInterrupt が発生した場合にセットアップとティアダウンが呼び出されることを示しています。

于 2012-06-23T09:43:00.957 に答える