在测试完成时运行的基本pytest拆解

时间:2015-11-06 02:26:00

标签: pytest fixtures teardown

我最低限度地使用pytest作为通用测试运行器,用于针对工作中的各种API产品进行大型自动化集成测试,并且我一直试图找到一个同样通用的拆卸功能示例,该功能在完成任何测试后运行,无论成败,都是如此。

我的典型使用模式是超线性的,通常是这样的:

def test_1():
    <logic>
    assert something

def test_2():
    <logic>
    assert something

def test_3():
    <logic>
    assert something

偶尔,当这样做有意义时,在我的脚本顶部,我将设置为&#34; True&#34;的autouse参数放入设置夹具中。在每个脚本的启动时运行:

@pytest.fixture(scope="session", autouse=True)
def setup_something():
    testhelper = TestHelper
    testhelper.create_something(host="somehost", channel="somechannel")

def test_1():
    <logic>
    assert something

def test_2():
    <logic>
    assert something

def test_3():
    <logic>
    assert something

直到最近,一次性码头工具环境让我逃脱了整个拆解过程,但我现在有点紧张,其中一个不可用。理想情况下,如果不转移我已经使用过的相同线性模式,我将如何实现另一个类似于以下内容的pytest工具:

@pytest.fixture
def teardown():
    testhelper = TestHelper
    testhelper.delete_something(thing=something)

运行完成后?

2 个答案:

答案 0 :(得分:2)

每个夹具都可能有一个拆卸部分:

@pytest.fixture
def something(request):
   # setup code
   def finalize():
       # teardown code
   request.addfinalizer(finalize)
   return fixture_result

或者我通常使用它:

@pytest.fixture
def something():
    # setup code
    yield fixture_result
    # teardown code

请注意,在pytest pre-3.0中,后一个成语所需的装饰器是@pytest.yield_fixture。但是,从3.0开始,可以使用常规@pytest.fixture装饰器,@pytest.yield_fixturedeprecated

查看更多here

答案 1 :(得分:0)

您可以在conftest.py

中使用这些功能
def pytest_runtest_setup(item):
    pass    

def pytest_runtest_teardown(item):
    pass

请参阅here了解文档