Назад к вопросам
Junior — Middle
62
Каким образом применяются фикстуры для взаимодействия с базой данных при написании тестов?
Ответ от нейросети
sobes.tech AI
Фикстуры в тестах на Python (например, с pytest) используются для подготовки и очистки состояния базы данных перед и после выполнения тестов. Это позволяет изолировать тесты друг от друга и гарантировать предсказуемость результатов.
Основные способы применения фикстур для работы с БД:
- Создание подключения и сессии: фикстура открывает соединение с тестовой базой, возвращает объект сессии или курсора, который используется в тестах.
- Подготовка данных: в фикстуре можно создавать необходимые записи, чтобы тесты работали с известным набором данных.
- Транзакции и откат: часто фикстуры запускают транзакцию перед тестом и делают откат после, чтобы не сохранять изменения в базе.
- Очистка: если транзакции не используются, фикстура может удалять созданные данные вручную.
Пример фикстуры с SQLAlchemy и pytest:
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from myapp.models import Base
@pytest.fixture(scope='function')
def db_session():
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
yield session # тесты используют сессию
session.rollback() # откат всех изменений
session.close()
В тесте:
def test_add_user(db_session):
user = User(name='Alice')
db_session.add(user)
db_session.commit()
assert db_session.query(User).filter_by(name='Alice').one()
Такой подход обеспечивает изоляцию тестов и чистоту данных.