如何在运行Django 1.10全部测试时仅打印错误信息?
解决Django 1.10测试时仅打印错误信息的方法
作为用Django踩过不少测试日志坑的开发者,针对你在Docker部署阶段遇到的测试日志泛滥问题,这里有几个适配Django 1.10版本的靠谱方案:
1. 用--verbosity参数快速控制输出(最简便)
Django的test命令本身就自带输出级别控制,--verbosity 0会直接屏蔽冗余日志,只保留错误、失败信息和最终测试结果,完全匹配你的需求:
python manage.py test --verbosity 0
- 补充下级别对应效果:
0:仅输出错误、失败案例和最终总结1:默认模式,显示进度条和基础结果2:输出每个测试用例的详细执行日志
2. 通过日志配置实现精准管控
如果需要更细粒度的控制(比如只想屏蔽特定模块的日志,保留其他错误),可以在settings.py里针对测试环境调整日志规则:
import sys # 检测当前是否在执行测试命令 if 'test' in sys.argv: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', # 仅输出ERROR及以上级别的日志 'level': 'ERROR', }, }, 'root': { 'handlers': ['console'], 'level': 'ERROR', }, # 要是需要单独调整某个业务app的日志级别,可以加这段 # 'loggers': { # 'your_app_name': { # 'handlers': ['console'], # 'level': 'ERROR', # 'propagate': False, # }, # }, }
这样不管测试过程中哪个模块输出日志,只有ERROR级别及以上的内容会被打印到stdout。
3. Docker脚本中用管道过滤日志(临时应急方案)
如果不想改动代码或命令参数,也可以在Docker运行脚本里用grep过滤输出,只保留错误相关内容:
# 先设置管道不影响命令的退出码(Docker需要靠退出码判断测试是否通过) set -o pipefail python manage.py test 2>&1 | grep -E "(ERROR|FAIL|Traceback|FAILED|ERROR:)"
不过这个方法有个小局限:如果测试全通过,终端会没有输出,需要结合命令最终的退出码判断结果,可靠性不如前两种方案。
内容的提问来源于stack exchange,提问作者user2880391
相关产品推荐
相关产品推荐

