2015-11-06 46 views
1

我很少使用pytest作爲通用測試運行器,用於在工作中對各種API產品進行大型自動化集成測試,並且我一直在試圖找到一個同樣通用的拆卸函數示例,在完成任何測試後運行,無論成功或失敗。在測試完成時運行的基本pytest拆卸

我的典型應用模式是超線性的,通常是這樣的:

def test_1(): 
    <logic> 
    assert something 

def test_2(): 
    <logic> 
    assert something 

def test_3(): 
    <logic> 
    assert something 

偶爾,當它是有道理這樣做,在我的腳本的頂部,我在一個安裝夾具折騰與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) 

的運行完成的時候?

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

或者像我通常用它:

回答

0

,你可以在你的conftest.py

def pytest_runtest_setup(item): 
    pass  

def pytest_runtest_teardown(item): 
    pass 

看到here的文檔

3

每個固定器可以有一個拆掉部分使用這些功能:

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

請注意,在3.0以前的pytest中,後一個習慣用法所需的裝飾器是@pytest.yield_fixture。但從3.0開始,可以使用常規的@pytest.fixture修飾器,而@pytest.yield_fixture則是deprecated

查看更多here

相關問題