Что можно использовать как альтернативу `yield` в pytest-фикстуре?

В pytest можно зарегистрировать очистку через request.addfinalizer(), а из фикстуры вернуть ресурс обычным return. Finalizer добавляют после успешного действия, которое нужно отменить.

Короткий ответ

Что ответить на собеседовании

В pytest можно зарегистрировать очистку через request.addfinalizer(), а из фикстуры вернуть ресурс обычным return. Finalizer добавляют после успешного действия, которое нужно отменить.

Подробный разбор

Ответ с пояснениями

В pytest можно зарегистрировать очистку через request.addfinalizer(), а из фикстуры вернуть ресурс обычным return. Finalizer добавляют после успешного действия, которое нужно отменить.

Пример с условным API:

@pytest.fixture
def user(request, api):
    created = api.create_user()
    request.addfinalizer(lambda: api.delete_user(created.id))
    return created

Зарегистрированная функция очистки будет вызвана и при последующей ошибке setup в этой фикстуре. Поэтому важно не регистрировать удаление до появления ресурса. Несколько finalizer выполняются в обратном порядке регистрации. Это не защита от аварийного завершения процесса или отключения машины.

Источник: docs.pytest.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее