visual - Wie setzen Sie DEBUG beim Ausführen eines Django-Tests auf "True"?




vs code run python file in terminal shortcut (4)

Ich führe zurzeit einige Django-Tests durch und es sieht so aus, dass DEBUG=False standardmäßig DEBUG=False ist. Gibt es eine Möglichkeit, einen bestimmten Test auszuführen, bei dem ich auf der Befehlszeile oder im Code DEBUG=True setzen kann?


Die akzeptierte Antwort hat bei mir nicht funktioniert. Ich verwende Selenium zum Testen und das Setzen von @override_settings(DEBUG=True) , dass der @override_settings(DEBUG=True) immer auf jeder Seite den Fehler 404 anzeigt. Und DEBUG=False zeigt keine Ausnahme-Tracebacks. Also habe ich einen Workaround gefunden.

Die Idee ist, das Verhalten von DEBUG=True mit einem benutzerdefinierten 500 Handler und dem integrierten django 500 Fehlerhandler zu emulieren.

  1. Fügen Sie dies zu myapp.views hinzu:

    import sys
    from django import http
    from django.views.debug import ExceptionReporter
    
    def show_server_error(request):
        """
        500 error handler to show Django default 500 template
        with nice error information and traceback.
        Useful in testing, if you can't set DEBUG=True.
    
        Templates: `500.html`
        Context: sys.exc_info() results
         """
        exc_type, exc_value, exc_traceback = sys.exc_info()
        error = ExceptionReporter(request, exc_type, exc_value, exc_traceback)
        return http.HttpResponseServerError(error.get_traceback_html())
  2. urls.py:

    from django.conf import settings
    
    if settings.TESTING_MODE:
        # enable this handler only for testing, 
        # so that if DEBUG=False and we're not testing,
        # the default handler is used
        handler500 = 'myapp.views.show_server_error'
  3. einstellungen.py:

    # detect testing mode
    import sys
    TESTING_MODE = 'test' in sys.argv

Wenn nun bei einem Ihrer Selenium-Tests ein Fehler 500 auftritt, wird eine schöne Fehlerseite mit Traceback und allem angezeigt. Wenn Sie eine normale Umgebung ohne Test ausführen, wird der Standard-500-Handler verwendet.

Inspiriert von:


Für einen bestimmten Test in einem Testfall können Sie den Dekorator override_settings verwenden:

from django.test.utils import override_settings
from django.conf import settings
class TestSomething(TestCase):
    @override_settings(DEBUG=True)
    def test_debug(self):
        assert settings.DEBUG

Sie können die Ergebnisse von DEBUG=True nicht sehen, wenn Sie einen Komponententest ausführen. Die Seiten werden nirgendwo angezeigt. Kein Browser

Das Ändern von DEBUG hat keine Auswirkungen, da die Webseiten (mit der Debugging-Ausgabe) nirgendwo sichtbar sind.

Wenn Sie eine Debugging-Webseite sehen möchten, die sich auf einen fehlerhaften Komponententest bezieht, dann führen Sie dies aus.

  1. Legen Sie Ihre Entwicklungsdatenbank ab.

  2. syncdb , um eine leere Entwicklungsdatenbank zu erstellen.

  3. Führen Sie die verschiedenen loaddata Skripts aus, um die Fixtures für diesen Test in Ihrer Entwicklungsdatenbank neu zu loaddata .

  4. Führen Sie den Server aus und durchsuchen Sie die Seite.

Jetzt können Sie die Debug-Ausgabe sehen.


Ab Django 1.11 können Sie --debug-mode , um die DEBUG-Einstellung vor dem Ausführen von Tests auf True zu setzen.





django