Остановить носеты от печати данных регистрации?

Как я могу предотвратить nosetests из вкрапленного вывода журнала на выходе из его тестов? Я просто добавляю запись в свой код Django следующим образом:

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))

Когда я запускаю тесты следующим образом:

nosetests --nocapture

Я получаю это:

[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

Я только начинаю с создания исключений и регистрации информации, и я, конечно, не хочу, чтобы мой тестовый результат был замутнен выводами моих операторов журнала. Я думал, что флаг "-nocapture" должен был предотвратить это. Я просмотрел всю документацию о нуклеусах и не видел ничего другого, что могло бы помочь. Я что-то упускаю? Есть ли способ остановить носетесты от включения моих сообщений журнала в свой вывод?

Спасибо!

Ответ 1

Спасибо тем, кто предоставил ответ на мой вопрос. Я решил не реализовывать решение @amezhenin, так как оно слишком сильно отличалось от того, как я запускаю свои тесты, и я не хотел ничего менять. Решения @Oleksiy избавились от некоторых сообщений, но не от всех. Я не совсем понял, к чему стремился @gardenunez, но это моя вина.

После дополнительных исследований я понял, что неправильно указывал аргумент проверки носа. Это не --nocapture как я указал в моем первоначальном вопросе, а --nologcapture. Когда я указал этот аргумент, все мои сообщения журнала были скрыты.

Ответ 2

Вы всегда можете запускать нос с помощью --logging-clear-handlers, чтобы очистить все остальные обработчики.

Ответ 3

Я могу предложить вам добавить что-то вроде этого в ваш settings.py:

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

btw, я использую nose и doctests для целей тестирования, поэтому мой полный шаблон выглядит следующим образом:

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. Забыл сказать, что я запускаю тест с python manage.py test, поэтому я могу ссылаться на 'test' в sys.argv.

Ответ 4

Попробуйте следующее:

logging.disable(logging.CRITICAL) или logging.disable(logging.NOTSET)

Он отключит протоколирование вызовов с указанным уровнем серьезности.