Как отладить ошибки базы данных в сложных интерфейсных тестах с помощью django, html и playwriter

Я запускаю более крупное приложение Django, в котором есть набор тестов, который работает как на Debian Bookworm, так и на Trixie. В тестах используются test_server fixture и sqlite. В настоящее время мы экспериментируем с представлениями на основе HTML, которые тестируем с помощью playstage.

Несколько недель назад при тестировании нашего нового представления HTML периодически возникали сбои, но только на Trixie. Единственными подходящими пакетами, предоставляемыми хостом Debian Trixie, являются sqlite 3.46 и python 3.13. Все остальное поставляется через pip и pyproject.tom в тех же версиях, что и на Bookworm.

Тест не завершается надежным образом, а если и завершается, то не всегда с одной и той же ошибкой. Единственная общая черта заключается в том, что при попытке получить текущий сеанс всегда происходит сбой, чтобы аутентифицировать запрашивающего пользователя (в тестируемом представлении есть auth decorator).

Сообщения об ошибках содержат

  • django.contrib.auth.models.User.MultipleObjectsReturned: get() returned more than one User -- it returned 2!
  • django/db/models/sql/compiler.py завершение работы с List index out of range при попытке загрузить кэш сеанса
  • django.db.utils.InterfaceError: bad parameter or other API misuse при попытке получить кэш сеанса.

В большинстве случаев они заканчиваются AttributeError: 'SessionStore' object has no attribute '_session_cache', но могут возникнуть различные проблемы, приводящие к сбою извлечения кэша сеанса.

На мой взгляд, с базой данных что-то не так. Я использую tox и pytest, база данных сбрасывается для каждого теста, в наборе тестов есть около двухсот других тестов, и все они выполняются нормально.

Итак, все, что я знаю, это то, что проблема возникает только тогда, когда я использую playstation для тестирования интерфейса, который загружает контент с помощью HTMX, и только тогда, когда я делаю это в Debian Trixie. Когда это происходит, это всегда связано с тем, что Django хочет получить данные сеанса, а база данных не может предоставить их каким-либо образом.

Я подозреваю, что хорошим следующим шагом было бы получить больше информации о том, что делает эта база данных во время тестов или с какими ошибками она сталкивается, но я не уверен, как получить эту информацию.

Я понимаю, что это ужасно запутанный вопрос, но я в некотором роде не могу в нем разобраться.

Был бы очень благодарен за любой намек или подсказки о том, что я мог бы сделать, чтобы получить больше информации, чтобы как-то разобраться в этом.

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