阻止测试打印日志信息?

时间:2014-04-15 21:51:20

标签: python django nosetests

如何防止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在输出中包含我的记录器消息?

谢谢!

4 个答案:

答案 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"] = {}

顺便说一句,我使用nosedoctests进行测试,因此我的完整模板如下所示:

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)

它将禁用具有指定严重性级别的日志记录调用。