2014-04-15 19 views
12

Wie verhindere ich, dass Nasetests die Protokollierungsausgabe in die Ausgabe ihrer Tests einfügen? Ich habe nur das Hinzufügen Protokollierung meiner Django-Code wie folgt aus:Stoppt Nosetests Drucken von Protokollinformationen?

import logging 
logger = logging.getLogger(__name__) 

def home_page(request, template): 
    device = get_device_capabilities(request) 
    device_type = get_device_type(device) 
    logger.info("device_type = " + device_type) 
    logger.info("screen_width = " + str(screen_width)) 

Wenn ich die Tests wie folgt ausführen:

nosetests --nocapture 

ich diese:

[04/15/2014 02:42:57 PM] INFO [apps.home.views:24] device_type = computer 
[04/15/2014 02:42:57 PM] INFO [apps.home.views:25] screen_width = 800 
.................................................................................................................................................................................................................................... 
---------------------------------------------------------------------- 
Ran 230 tests in 42.521s 

OK 

Ich bin einfach Ich starte mit dem Aufrufen von Ausnahmen und der Protokollierung von Informationen und ich möchte natürlich nicht, dass meine Testausgabe mit der Ausgabe meiner Logger-Anweisungen übersät ist. Ich dachte, die "--nocapture" -Flagge sollte das verhindern. Ich habe alle Neutest-Dokumente überflogen und nichts anderes mehr gesehen, was helfen würde. Fehle ich etwas? Gibt es eine Möglichkeit, zu verhindern, dass die Nasetests meine Logger-Nachrichten in die Ausgabe aufnehmen?

Danke!

Antwort

23

Danke an diejenigen, die eine Antwort auf meine Frage zur Verfügung gestellt haben. Ich entschied mich dafür, die Lösung von amezhenin nicht zu implementieren, da sie zu verschieden von der Art war, wie ich meine Tests durchführe, und ich wollte mich nicht ändern. Oleksiys Lösungen lösten einige Logmeldungen, aber nicht alle. Ich habe nicht ganz verstanden, was Gardenunez erreicht hat, aber das ist meine Schuld.

Nach weiteren Recherchen wurde mir klar, dass ich das nosetest Argument falsch angegeben hatte. Es ist nicht "--nocapture", wie ich in meiner ersten Frage angedeutet habe, sondern "--nologcapture". Als ich dieses Argument angegeben habe, wurden alle meine Logging-Nachrichten ausgeblendet.

+1

"' nologcapture "_disable_ das Logging-Plugin nicht, was dazu führt, dass die Log-Meldungen inline erscheinen? – munchybunch

2

kann ich Sie vorschlagen, so etwas wie dies in Ihre settings.py zu setzen:

if 'test' in sys.argv: 
    # disable loggers output 
    LOGGING["loggers"] = {} 

btw, ich nose und doctests zu Testzwecken verwendet, so meine volle Vorlage wie folgt aussieht:

if 'test' in sys.argv: 
    # add Nose to INSTALLED_APPS for running tests 
    INSTALLED_APPS = INSTALLED_APPS + ('django_nose',) 
    TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 
    NOSE_ARGS = ['--with-doctest'] 
    # change DB to sqlite3, when running test for speedup 
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'} 
    # disable loggers output 
    LOGGING["loggers"] = {} 

UPD. Ich habe vergessen zu sagen, dass ich Test mit python manage.py test starte, deshalb kann ich mich auf 'test' in sys.argv beziehen.

0

Try this:

logging.disable(logging.CRITICAL) oder logging.disable(logging.NOTSET)

Es wird Protokollierung Anrufe mit dem angegebenen Schweregrad deaktivieren.

4

Sie können immer die Nase mit --logging-clear-handlers ausführen, um alle anderen Protokollierungshandler zu löschen.