Top.Mail.Ru
Ответы

Как настроить tortoise-orm для pytest? Сейчас такая ошибка.

E asyncpg.exceptions.ObjectInUseError: database "test_project" is being accessed by other users

E DETAIL: There is 1 other session using the database.

По дате
По рейтингу
Аватар пользователя
Мастер
123456789101112131415161718192021222324252627282930313233343536373839
 Для исправления этой ошибки вам нужно настроить тестовую базу данных для каждого тестового запуска. Для этого вы можете использовать фикстуры в Pytest. 
 
1. Создайте файл conftest.py в корневом каталоге вашего проекта, если его еще нет. 
2. Внутри файла создайте фикстуру, которая будет создавать новый экземпляр базы данных для каждого тестового запуска: 
 
```python 
import pytest 
from tortoise.contrib.test import finalizer, initializer 
 
 
@pytest.fixture(scope="session") 
async def db_url(): 
    return "postgres://user:password@localhost:5432/test_project" 
 
 
@pytest.fixture(scope="session") 
async def db(db_url): 
    await initializer(["app.models"], db_url=db_url) 
    yield 
    await finalizer() 
 
 
@pytest.fixture(scope="function") 
async def db_connection(db, db_url): 
    async with Tortoise.get_connection("default"): 
        yield 
``` 
 
3. Создайте новый тестовый файл, например, test_sample.py, и использовать фикстуру, которую вы определили в conftest.py, чтобы запустить тесты с новой тестовой базой данных: 
 
```python 
import pytest 
 
@pytest.mark.asyncio 
async def test_sample(db_connection): 
    # тут ваш код теста 
``` 
 
Это должно настроить вашу тестовую базу данных для использования в Pytest, и вы должны больше не получать ошибку "database is being accessed by other users".