如何防止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"国旗应该是为了防止这种情况。我已经浏览了所有的测试文档,并没有看到任何有用的东西。我错过了什么吗?有没有办法阻止nosetests在输出中包含我的记录器消息?
谢谢!
答案 0 :(得分:30)
感谢那些为我的问题提供答案的人。我选择不实施@amezhenin的解决方案,因为它与我运行测试的方式有太大不同,而我并不想改变。 @Oleksiy的解决方案摆脱了一些日志消息,但不是全部。我没有得到@gardenunez得到的东西,但这是我的错。
经过更多的研究,我意识到我错误地指定了nosetest参数。它不是我在初始问题中指出的--nocapture
而是--nologcapture
。当我指定这个参数时,我的所有日志消息都被隐藏了。
答案 1 :(得分:5)
您始终可以使用--logging-clear-handlers
运行nose以清除所有其他日志记录处理程序。
答案 2 :(得分:3)
我建议你把这样的东西放到settings.py
:
if 'test' in sys.argv:
# disable loggers output
LOGGING["loggers"] = {}
顺便说一句,我使用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
。
答案 3 :(得分:0)
试试这个:
logging.disable(logging.CRITICAL)
或logging.disable(logging.NOTSET)
它将禁用具有指定严重性级别的日志记录调用。