Как сделать очистку ресурсов после выхода из теста в pytest
Python
Middle
Без компании
Как сделать очистку ресурсов после выхода из теста в pytest
Ответы
Для очистки ресурсов в pytest можно использовать фикстуры с `yield` или `addfinalizer`.
**1. Фикстура с `yield`:**
```
import pytest
@pytest.fixture
def resource():
res = initialize_resource() # Инициализация ресурса
yield res # Передача ресурса в тест
cleanup_resource(res) # Очистка после теста
```
**2. Фикстура с `addfinalizer`:**
```
import pytest
@pytest.fixture
def resource(request):
res = initialize_resource()
request.addfinalizer(lambda: cleanup_resource(res))
return res
```
**Разница:**
- `yield` удобнее для простых случаев.
- `addfinalizer` позволяет добавлять несколько финализаторов и работает даже если `setup` упал.
**Пример с контекстным менеджером:**
```
@pytest.fixture
def temp_file():
with open("temp.txt", "w") as f:
yield f # Файл закроется автоматически после теста
```