Встречается на собеседованиях • сегодня
Как использовать fixture для работы с БД в тестировании
Для работы с БД в тестах pytest используем фикстуры. Лучше всего создать сессионную фикстуру для подключения и фикстуру для транзакций.
Пример с SQLAlchemy:
python
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
@pytest.fixture(scope="session")
def db_engine():
engine = create_engine("sqlite:///:memory:")
yield engine
engine.dispose()
@pytest.fixture
def db_session(db_engine):
connection = db_engine.connect()
transaction = connection.begin()
session = sessionmaker(bind=connection)()
text
yield session
session.close()
transaction.rollback()
connection.close()text
Ключевые моменты:
1. `scope="session"` для engine - переиспользуем подключение
2. Каждый тест получает чистую сессию благодаря rollback
3. Используем `yield` для cleanup
Пример теста:
```python
def test_user_create(db_session):
user = User(name="Test")
db_session.add(user)
db_session.commit()
assert db_session.query(User).count() == 1
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы