Как использовать pytest для тестирования FastApi?

Как можно исправить проблему с тем, что переменная async_session_maker внутри тестов отличается от async_session_maker внутри проекта, что приводит к тому, что при выполнении тестов они работают с тестовой базой данных, в то время как бекенд продолжает обращаться к основной базе данных?
  • 1 августа 2024 г. 13:33
Ответы на вопрос 1
Для тестирования FastApi с использованием pytest можно использовать библиотеку pytest-asyncio для выполнения асинхронных тестов и зависимости pytest_dependency для управления зависимостями между тестами.

Чтобы исправить проблему с отличающимися переменными async_session_maker внутри тестов и проекта, можно использовать fixtures в pytest. Сначала необходимо создать фикстуру, которая будет создавать новый async_session_maker для каждого теста:

```python
import pytest
from app.main import async_session_maker

@pytest.fixture
async def test_async_session_maker():
    async with async_session_maker() as session:
        yield session
```

Затем можно использовать эту фикстуру в тестах, чтобы гарантировать использование правильного async_session_maker:

```python
@pytest.mark.asyncio
async def test_example(test_async_session_maker):
    # тестовый код, использующий test_async_session_maker
```

Теперь все тесты будут использовать тот же async_session_maker, что и проект, и проблема с работой с разными базами данных должна быть решена.
Похожие вопросы