Как отладить ошибки базы данных в сложных интерфейсных тестах с помощью 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 хочет получить данные сеанса, а база данных не может предоставить их каким-либо образом.
Я подозреваю, что хорошим следующим шагом было бы получить больше информации о том, что делает эта база данных во время тестов или с какими ошибками она сталкивается, но я не уверен, как получить эту информацию.
Я понимаю, что это ужасно запутанный вопрос, но я в некотором роде не могу в нем разобраться.
Был бы очень благодарен за любой намек или подсказки о том, что я мог бы сделать, чтобы получить больше информации, чтобы как-то разобраться в этом.