Встречается на собеседованиях • сегодня

Как использовать 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
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы