Чего я пытаюсь достичь.
Я тестирую остальные API в проекте Django. Я хочу создать тестовый класс со связанными тестовыми функциями (каждая следующая тестовая функция опирается на предыдущую) - первый сбой означает, что все провалились. В первой тестовой функции я создаю объект с запросом post. В следующем тестовом примере я хочу проверить, что этот объект действительно существует, используя запрос 'get'.
Как это работает
Похоже, Django -pytest очищает базу данных от всех записей после каждого теста.
В документации pytest упоминается: https://pytest-django.readthedocs.io/en/latest/helpers.html#pytest -mark- django -db-request-database-access
Есть ли способ изменить это?
Мой код:
Мой conftest.py
:
import pytest
@pytest.fixture(scope='session')
def django_db_setup():
from django.conf import settings
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db_name.sqlite3',
}
@pytest.fixture
def object_data():
return {"some keys": "some values"}
@pytest.fixture
def object_name():
return "some name"
Мой tests.py
:
import pytest
from rest_framework.test import APIClient
from rest_framework import status
@pytest.mark.django_db
class TestAPI:
def setup(self):
self.client = APIClient()
def test_create_object(self, object_data, object_name):
post_response = self.client.post("/api/object/", data=object_data, format="json")
assert status.is_success(post_response.status_code)
# make sure that report was created
get_response = self.client.get(f"/api/object/{object_name}/")
assert status.is_success(get_response.status_code)
# object exists here (test passes)
def test_get_object(self, object_name):
get_response = self.client.get(f"/api/object/{object_name}/")
assert status.is_success(get_response.status_code)
# object does not exists here (test failes)