py.test:获取KeyboardInterrupt来调用拆解

时间:2012-06-13 15:27:59

标签: python pytest

我正在使用py.test编写一些测试,在我的测试中我使用了funcargs。这些funcargs在conftest.py中定义了自己的设置和拆解,如下所示:

conftest.py:

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

我的问题是,当有人使用CTRL + C来停止测试执行时,它会使所有内容都处于未知状态。 我知道有一个钩子pytest_keyboard_interrupt但我不知道该怎么做。

对于这个noobish问题感到抱歉。

1 个答案:

答案 0 :(得分:4)

你没有提供一个完整的例子,所以也许我错过了一些东西。但是这里有一个如何工作的例子,使用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,则会调用setup和teardown。