2010-06-12 8 views
7

J'utilise le module de journalisation Python standard. Lorsque j'appelle python manage.py test, j'aimerais désactiver la journalisation avant que tous les tests ne soient exécutés. Y at-il un signal ou un autre type de hook que je pourrais utiliser pour appeler logging.disable? Ou existe-t-il un autre moyen de désactiver la journalisation lorsque python manage.py test est exécuté?Désactiver la journalisation pendant le test manage.py?

Répondre

2

Le seul moyen que je connaisse est d'éditer manage.py lui-même ... pas très élégant, bien sûr, mais au moins, il devrait vous amener là où vous devez être.

+0

Ah, je ne l'avais pas pensé (... bien évidemment) . Merci! –

+0

@Eric, de rien! –

9

Comme alternative facile, vous pouvez désactiver la journalisation lors des tests en cours d'exécution dans vos paramètres dans le fichier comme ceci:

if 'test' in sys.argv: 
    logger.removeHandler(handler) 
    logger.setLevel(logging.ERROR) 
+0

Merci - a travaillé comme un charme! –

4

Je préfère effectuer des tests avec settings_test.py séparés, où je peux supprimer des applications inutiles, middleware et d'autres des choses dont je n'ai pas besoin pendant les tests. Et je peux désactiver la sortie de journalisation ici aussi de cette façon:

from settings import * 
import logging 

# direct all logging output to nowhere 
class NullHandler(logging.Handler): 
    def emit(self, record): 
     pass 
logging.getLogger().addHandler(NullHandler()) 
12

Il est en fait une bien meilleure façon de le faire, avec django-nose il y a un kwarg:

Il suffit de lancer:

./bin/manage.py test --logging-clear-handlers 
+1

./manage.py: erreur: pas une telle option: --logging-clear-handlers –

+1

En effet, je ne l'avais pas spécifié, mais vous avez besoin de django-nose pour cela: https://github.com/jbalogh/django- nez et https://nose.readthedocs.org/en/latest/usage.html?highlight=#cmdoption--logging-clear-handlers – Rmatt

5

chose que j'ai Easiest utilisé:

import logging 

class MyTestClass(TestCase): 
    def setUp(self): 
     logging.disable(logging.CRITICAL) 

Cela nécessite aucune modification, rapiéçage, installations supplémentaires, et ainsi de suite. Toute la journalisation est complètement désactivée.

0

Si vous utilisez django-nose, vous pouvez ajouter l'extrait ci-dessous à votre fichier settings.py pour désactiver la sortie de l'enregistrement lors de l'exécution ./manage.py test

NOSE_ARGS = [ 
    '--nologcapture' 
] 
Questions connexes