How can I disable logging while running unit tests in Python Django?

后端 未结 15 775
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-07 09:50

I am using a simple unit test based test runner to test my Django application.

My application itself is configured to use a basic logger in settings.py using:

<
15条回答
  •  时光取名叫无心
    2020-12-07 10:40

    Some of my tests contain assertions about log output, so changing the log level breaks them. Instead, I changed my Django LOGGING settings to use a NullHandler when running tests:

    if 'test' in sys.argv:
        _LOG_HANDLERS = ['null']
    else:
        _LOG_HANDLERS = ['console']
        
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'simple': {
                'format': '%(levelname)s %(message)s'
            },
        },
        'handlers': {
            'null': {
                'level': 'DEBUG',
                'class': 'logging.NullHandler',
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'simple',
            },
        },
        'loggers': {
            'django': {
                'handlers': _LOG_HANDLERS,
                'propagate': True,
                'level': 'INFO',
            },
        }
    }
    

提交回复
热议问题