如何停止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”这个选项可以解决这个问题。我浏览了所有的nosetest文档,但没有找到其他能帮忙的内容。我是不是漏掉了什么?有没有办法让nosetests的输出不包含我的日志信息呢?
谢谢!
4 个回答
1
试试这个:
logging.disable(logging.CRITICAL)
或者 logging.disable(logging.NOTSET)
这样做会关闭指定严重程度的日志记录。
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"] = {}
更新:我忘了说,我是用 python manage.py test
来运行测试的,这就是为什么我可以在 sys.argv
里提到 'test'
。
6
你可以随时使用 --logging-clear-handlers
这个命令来清除所有其他的日志处理器。
33
感谢那些回答我问题的人。我没有选择实现@amezhenin的方案,因为它和我测试的方式差别太大,我不想改变我的做法。@Oleksiy的方案虽然去掉了一些日志信息,但并没有全部去掉。我没有完全理解@gardenunez的意思,不过这可能是我自己的问题。
经过更多的研究,我意识到我之前指定的nosetest参数不对。其实不是我在最初问题中提到的--nocapture
,而是--nologcapture
。当我指定这个参数时,我的所有日志信息都被隐藏了。