Python 如何防止django测试显示sys.stdout消息?

Python 如何防止django测试显示sys.stdout消息?,python,django,nose,django-nose,Python,Django,Nose,Django Nose,我的问题是,因为我在运行单元测试时向django应用程序添加了日志记录,所以所有日志消息都显示在控制台中。我用鼻子做试跑者。它通常的行为是捕获sys.stdout,仅在测试失败时显示控制台输出,并在测试结束时显示 我在运行测试时通常会有以下输出: ........ Ran 8 tests in 0.876s OK Destroying test database for alias 'default'... 这是我现在运行python manage.py测试帐户时得到的输出: ...log

我的问题是,因为我在运行单元测试时向django应用程序添加了日志记录,所以所有日志消息都显示在控制台中。我用鼻子做试跑者。它通常的行为是捕获sys.stdout,仅在测试失败时显示控制台输出,并在测试结束时显示

我在运行测试时通常会有以下输出:

........
Ran 8 tests in 0.876s

OK
Destroying test database for alias 'default'...
这是我现在运行
python manage.py测试帐户时得到的输出:

...log message
.log message
....log message
Ran 8 tests in 1.034s

OK
Destroying test database for alias 'default'...
当我在代码中添加了使用Python标准日志库的日志记录时,这种情况就开始发生了。我更改了我的
设置.py
视图.py
。下面你可以检查我到底改变了什么

有人能帮我保持日志记录,但在我运行测试时避免烦人的额外输出吗

添加到
设置.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'stream': sys.stdout,
        },
    },
    'loggers': {
        '': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,
        },
    },
}
添加到我的视图中

import logging

logger = logging.getLogger(__name__)

logger.info("log message")
nosetests accounts/ --with-coverage --cover-package=accounts,keys, utils --cover-html --cover-erase --logging-filter='selenium' --verbosity=1
django用于运行我的测试的命令

import logging

logger = logging.getLogger(__name__)

logger.info("log message")
nosetests accounts/ --with-coverage --cover-package=accounts,keys, utils --cover-html --cover-erase --logging-filter='selenium' --verbosity=1
settings.py中配置鼻子测试跑步器(工作时相同)


您应该编写一个自定义测试运行程序来禁用日志记录或更改级别

import logging

from django_nose import NoseTestSuiteRunner


class DisableLoggingNoseTestSuiteRunner(NoseTestSuiteRunner):
    """
    Disable the test runner log level below `logging.CRITICAL`.
    """
    def run_tests(self, *args, **kwargs):
        # Disable logging below critical
        logging.disable(logging.CRITICAL)
        super(DisableLoggingNoseTestSuiteRunner, self).run_tests(*args, **kwargs)
您还必须更改
设置.py
才能使用该测试运行程序

TEST_RUNNER = 'package_where_you_place_it.DisableLoggingNoseTestSuiteRunner'

我想可能是您的
--日志过滤器
您需要包含selenium日志吗?我不确定您是否理解您的意思。你想在我的日志过滤器中添加其他内容吗?你能具体解释一下你会怎么做吗?谢谢