В чем причина этого побочного эффекта при модульном тестировании django с помощью sqlite?

#django #unit-testing #sqlite

#django #модульное тестирование #sqlite

Вопрос:

Один из моих модульных тестов выполняется нормально при выполнении в автономном режиме, но терпит неудачу при выполнении с другими тестами testcase.

Я получаю неожиданный статус 404 при отправке запроса post.

Похоже, что pb вызван исключением 404 при получении объекта из базы данных. Если я прокомментирую другой пост в том же представлении в предыдущем тесте, проблема больше не возникает.

Похоже, что pb вызван sqlite (память или файл). При использовании mysq ошибок нет, но процесс тестирования происходит намного медленнее.

Есть идеи, чем можно объяснить такое поведение и как исправить этот pb?

Комментарии:

1. Вы предварительно заполняете свою базу данных для тестов? И какова продолжительность жизни базы данных с вашими тестовыми примерами?

2. Некоторые данные загружаются благодаря fixtures. Некоторые объекты создаются с помощью model_mommy . Однако отсутствующий объект создается производственным кодом.

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

4. Привет @ mrts Это довольно старая проблема 🙂 Я точно не помню, но я думаю, что я бы опубликовал решение, если бы оно у меня было. С тех пор я пытаюсь тестировать с той же базой данных, что и в рабочей. Это позволяет избежать этого побочного эффекта.

5. Спасибо за ответ, @luc!

Ответ №1:

следует иметь в виду некоторые различия между sqlite и mysql, одним из которых является чувствительность к регистру. запросы mysql по умолчанию не чувствительны к регистру, но запросы sqlite чувствительны к регистру. таким образом, поисковые запросы, подобные MyModel.objects.get(slug="Asdf") , могут найти модель с slug asdf с использованием mysql, но не с использованием sqlite

Комментарии:

1. Спасибо за этот комментарий. Я получаю объект по идентификатору, поэтому случай не должен быть причиной моей проблемы.

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

3. можете ли вы определить, что вызывает 404? вы пробовали удалить оператор pdb.set_trace в своем коде представления и выполнить пошаговое

4. ДА. 404 вызвано get_object_or_404(Moeld, id=the_id). the_id кажется правильным. Все работает нормально, когда тест выполняется автономно или с mysql.

5. объект определенно существует? например, указан в Model.objects.all()