2015-11-06 6 views
1

Я использую pytest как общий тестовый бегун для больших автоматических тестов интеграции с различными продуктами API на работе, и я пытаюсь найти одинаково общий пример функции разрыва, которая работает при завершении любого теста, независимо от успеха или неудачи.Базовая остановка pytest, которая выполняется при завершении теста

Мой типичный образец использования супер линейная и обычно идет что-то вроде этого:

def test_1(): 
    <logic> 
    assert something 

def test_2(): 
    <logic> 
    assert something 

def test_3(): 
    <logic> 
    assert something 

Иногда, когда это имеет смысл делать это, в верхней части моего сценария я швыряю в настройки прибора с autouse аргумент установлен в «True», который работает на запуск каждого сценария:

@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) 

когда завершается прогон?

ответ

0

вы можете использовать эти функции в вашем conftest.py

def pytest_runtest_setup(item): 
    pass  

def pytest_runtest_teardown(item): 
    pass 

см here для документов

3

Каждый светильник может иметь рушить часть:

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

Или, как я обычно использую это:

Обратите внимание, что в pytest pre-3.0 декоратор, необходимый для последней идиомы, был @pytest.yield_fixture. Начиная с 3,0, однако, можно просто использовать обычный декоратор @pytest.fixture, а @pytest.yield_fixture - deprecated.

here