Остановить носеты от печати данных регистрации?
Как я могу предотвратить 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)
Он отключит протоколирование вызовов с указанным уровнем серьезности.