Я пытаюсь написать тестовые примеры в Django, используя Selenium. Я хочу использовать существующие фикстуры, чтобы в моей тестовой базе данных (SQLite3) были тестовые данные для каждого теста.
У меня есть несколько тестовых примеров модели (только с использованием класса TestCase) следующим образом:
from django.test import TestCase
from django.test import LiveServerTestCases
from missions.models import Mission, MissionDataRecord
class MissionModelTests(TestCase):
fixtures = ['myproject_common/fixtures/auth_initial_load.json', 'worklog/fixtures/worklogs_initial_load',
'missions_initial_load.json']
def test_object_name_is_mission_title(self):
mission = Mission.objects.get(id=1)
self.assertEqual(mission.title, str(mission))
def test_object_name_is_mission_title_again(self):
mission = Mission.objects.get(id=1)
self.assertEqual(mission.title, str(mission))
Это работает, как и ожидалось, при таком запуске (я получаю два прохода теста). Однако для тестирования Selenium мне нужно использовать LiveServerTestCase вместо TestCase.
Приведенный выше простой пример представляет собой модельный тест, но для иллюстрации проблемы, с которой я сталкиваюсь в Selenium, если я просто заменю «TestCase» на «LiveServerTestCase», первый тест пройдет, но второй тест завершится ошибкой
django.db.utils.IntegrityError: проблема с установкой приспособления '[...]/fixtures/auth_initial_load.json': не удалось загрузить auth.User(pk=1): ограничение UNIQUE не удалось: auth_user.username
Эта ошибка возникает в _fixture_setup файла /django/test/testcases.py. Кажется, это говорит о том, что мои фикстуры (в частности, фикстура auth_initial_load) пытаются снова загрузить ПОВЕРХ существующих данных. Однако из чтения документов django этого не должно происходить, потому что каждый тест должен выполняться в своей собственной транзакции (что, как я полагаю, означает, что фикстуры загружаются для каждой транзакции).
Что здесь происходит и, что более важно, как я могу использовать LiveServerTestCase с моими существующими приборами (аналогично тому, как я сейчас использую TestCase)? На самом деле мне нужно использовать StaticLiveServerTestCase, но я предполагаю, что код будет таким же.