Pytest Доступ к базе данных запрещен

Я пытаюсь запустить свои тесты с доступом к существующей базе данных, чтобы использовать ее повторно.

Вот ошибка:

ERROR drf/tests/test_auth.py - RuntimeError: Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.

здесь pytest.ini

[pytest]
DJANGO_SETTINGS_MODULE = drf.tests.test_settings
python_files = test_*.py
django_debug_mode = true
pythonpath = .venv/bin/python
addopts = --reuse-db --create-db

здесь test_settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR + '/tests', 'dump_test.sql'),
    }
}

Вот упрощенная версия теста:

@pytest.mark.django_db
class AuthTestCase:
    def test_two_step_authentication(self):
        user = UsersFactory.create()

        # Initialize the API client
        client = APIClient()

        # Step 1: Authenticate the user to get the initial token
        url_step1 = reverse('token-auth-s1')
        credentials = {
            'email': user.email,
            'password': 'password123'
        }
        response_step1 = client.post(url_step1, credentials, format='json')

        # Assert the response status code
        assert response_step1.status_code == 200

Структура каталога:

drf
├── drf
│   ├── __init__.py
│   ├── settings.py
│   ├── tests
│   │   ├── __init__.py
│   │   ├── dump_test.sql
│   │   ├── factory_boy
│   │   │   ├── __init__.py
│   │   │   ├── factory_models.py
│   │   │   └── languages_factory.py
│   │   ├── test_auth.py
│   │   └── test_settings.py
├── manage.py
└── pytest.ini

Список того, что я пробовал до сих пор:

  • Используя @pytest.mark.django_db и @pytest.mark.django_db(True), вы получили ту же ошибку.
  • Переместил @pytest.mark.django_db перед функцией, но получил ту же ошибку.
  • Изначально база данных была PostgreSQL в Docker, но для простоты я сбрасывал содержимое в test_dump.sql.
  • Разделите settings.py на test_settings.py и установите базу данных SQLite.
  • Проверил с помощью os.path.exists путь к файлу dump_test.sql, который возвращает True.

Если у кого-то есть идеи, я их принимаю, спасибо!

Вернуться на верх