Python 如何防止django测试显示sys.stdout消息?
我的问题是,因为我在运行单元测试时向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
........
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日志吗?我不确定您是否理解您的意思。你想在我的日志过滤器中添加其他内容吗?你能具体解释一下你会怎么做吗?谢谢