Django: почему я не могу получить трассировку (в случае ошибки), когда я запускаю тесты LiveServerTestCase? - программирование
Подтвердить что ты не робот

Django: почему я не могу получить трассировку (в случае ошибки), когда я запускаю тесты LiveServerTestCase?

Я пишу несколько тестов с Selenium.

Когда я запускаю тесты selenium (LiveServerTestCase type), и у меня есть некоторая ошибка в моем коде (не в тесте, я имею в виду в выполненном коде, например, на домашней странице, которую я вижу с селеном), я получаю шаблон 500 (что обычно я получаю, когда у меня DEBUG = False), даже если у меня есть:

DEBUG = True 
INTERNAL_IPS = ('127.0.0.1',)

Я застрял в этом, и я не понимаю, почему мой тест не удался (потому что в публичном 500 я не показываю исключения).

Почему он ведет себя так? Где я могу найти решение?

Когда я запускаю серверы, он отлично работает (я получаю трассировки).

4b9b3361

Ответ 1

из django docs https://docs.djangoproject.com/en/1.4/topics/testing/#other-test-conditions

Кажется невозможным переопределить это в данный момент, даже с https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.utils.override_settings

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

edit: я нашел способ установить DEBUG = True в моих тестах на селен. В моем подклассе я переопределяю конструктор и изменяю настройку.

from django.conf import settings

class SeleniumLiveServerTestCase(LiveServerTestCase):

    def __init__(self, *args, **kwargs):
        super(SeleniumLiveServerTestCase, self).__init__(*args, **kwargs)
        if settings.DEBUG == False:
            settings.DEBUG = True

это уродливо, но работает!

Ответ 2

Я столкнулся с той же проблемой, и теперь можно переопределить настройки.

на основе вашего примера вы импортируете override_settings и поместите декоратор над классом:

from django.test import override_settings

@override_settings(DEBUG=True)
class SeleniumLiveServerTestCase(LiveServerTestCase):

    ...

подробности в django docs

Ответ 3

Я не очень хорошо знаком с набором тестов Selenium, но я знаю, что если вы развертываете приложение, а ваш IP-адрес не зарегистрирован в кортеже "INTERNAL_IPS", вы можете не увидеть трассировки, даже если DEBUG установлено значение True. Когда вы используете Django runerver, он автоматически добавляет локальную машину к параметру INTERNAL_IPS, однако обычно это пустой кортеж. Моя ставка заключается в том, что Selenium не делает этого для вас, и может быть, поэтому вы не видите трассировки. Я бы попробовал добавить это, если вы еще этого не сделали.

Что-то вроде этого должно работать нормально:

INTERNAL_IPS = ('127.0.0.1',)

Настройки Django (INTERNAL_IPS)