Senior
30
Анализ кода с фикстурой session scope и autouse=True: какой тест упадёт и почему?
Companies where asked
Tangem
Answer from AI
sobes.tech AI
При использовании фикстуры с областью session и параметром autouse=True она автоматически применяется ко всем тестам в сессии.
Если в фикстуре происходит настройка или изменение состояния, которое не сбрасывается между тестами, то тесты, зависящие от чистого состояния, могут упасть.
Например, если фикстура создает сессию базы данных и не откатывает транзакции после каждого теста, то изменения, сделанные в одном тесте, могут повлиять на другие. В результате тест, ожидающий определенное состояние, упадет из-за измененного контекста.
Итого, тест упадет, если он зависит от изначального состояния, а фикстура с session scope и autouse=True не обеспечивает изоляцию между тестами.
Чтобы избежать этого, можно:
- Использовать фикстуры с меньшей областью (например,
function), чтобы состояние сбрасывалось после каждого теста. - В фикстуре явно откатывать изменения после каждого теста.
- Не использовать
autouse=True, а подключать фикстуру только там, где нужно.
Пример:
import pytest
@pytest.fixture(scope="session", autouse=True)
def setup_db():
# подключение к БД
yield
# закрытие подключения
@pytest.fixture(autouse=True)
def rollback_transaction():
# начать транзакцию
yield
# откат транзакции
# Если rollback_transaction не используется, изменения из тестов сохраняются,
# и тесты, ожидающие чистое состояние, упадут.