Возможна ли реализация фикстуры pytest, которая запускалась бы перед каждой тестовой функцией, либо открывая транзакцию, либо еще каким-то способом, далее передавала управление тестовой функции, так делала свои тестовые дела, после завершения тестовой функции, фикстура возвращала бы прежнее состояние бд(состояние до тестовой функции).
На данный момент бд перезапускается под тестовый модуль, отсюда возникают проблемы, связанные с накладкой тестов друг на друга и, как следствие, получение неверных результатов.
Перезапуск БД после каждой функции пробовали, время прохождения тестов увеличивается кратно.
Примерный скелет необходимой фикстуры:
@pytest_asyncio.fixture(autouse=True)
async def start_transaction(app: FastAPI) -> None:
"""Фикстура для отката базы данных после каждого теста."""
async with app.container.db().bind.transaction() as tx:
...
yield app.container.db()
....
try:
await tx.raise_rollback()
except Exception as ex:
await tx.raise_rollback()
Фикстура проходит без ошибок и в каждом тесте, и идет всё как надо: фикстура -> yield -> тест -> фикстура. Но БД она не откатывает.
Предполагаю, что это связано с разными коннектами к БД ( у фикстуры и у функции разные коннекты к БД).
Если кто-то решал данные вопрос, подскажите.