Back to questions
OZON
Senior
7
Как добавить очищение списка после завершения теста? В чем разница между yield и AdFinalizer?
Companies where asked
Answer from AI
sobes.tech AI
В тестировании на Python с использованием pytest для очистки ресурсов после теста часто используют конструкцию с yield в фикстурах. Код до yield выполняется до теста, а после yield — после теста, что удобно для очистки, например, очистки списка.
Пример фикстуры с очисткой списка:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Очистка после теста
AdFinalizer — это метод в pytest, который позволяет добавить функцию очистки, которая будет вызвана после теста. Его можно использовать внутри фикстуры через request.addfinalizer(cleanup_func).
Разница между yield и addfinalizer:
yieldболее читаемый и современный способ организации setup/teardown в фикстурах.addfinalizerпозволяет добавлять несколько функций очистки динамически.
Пример с addfinalizer:
import pytest
def cleanup():
print("Очистка после теста")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
В целом, yield предпочтительнее для простых случаев, addfinalizer — для более сложных сценариев с несколькими финализаторами.