sli*_*nkp 13 testing django logging http-status-code-404
刚升级到Django 1.3.我每次检查给定的URL是404时,我的测试套件现在都会显示一堆无用的警告.它在Django 1.2下没有这样做.
例如,假设我们有连接的视图和URL,以便此测试通过:
def test_foo(self):
response = self.client.get('/foo/bar/')
self.assertEqual(response.status_code, 200)
response = self.client.get('/foo/bar2/')
self.assertEqual(response.status_code, 404)
Run Code Online (Sandbox Code Playgroud)
虽然测试通过,但404(我们期望)会触发对控制台的警告:
.WARNING not Found:/ foo/bar2 /
这只是无用的噪音; 我目前的一个测试套件中有大约30个.
有没有办法在测试期间让那些人沉默?我想在正常操作期间让它们保持开启状态.而且我认为我不想过滤掉'django.request'记录器中的所有警告.
jte*_*ace 15
警告来自这里:http: //code.djangoproject.com/svn/django/trunk/django/core/handlers/base.py
你想要做的是在测试开始时将'django.request'模块的记录阈值设置为高于WARNING(例如ERROR)的值,然后再将其设置回来.
尝试这样的事情:
import logging
#before tests
logger = logging.getLogger('django.request')
previous_level = logger.getEffectiveLevel()
logger.setLevel(logging.ERROR)
#after tests
logger.setLevel(previous_level)
Run Code Online (Sandbox Code Playgroud)
我知道有些年过去了,但对于寻找这个问题的其他人来说,以下内容可能会有所帮助.
基于@jterrace解决方案,您可以轻松实现这样的装饰器功能:
import logging
def prevent_request_warnings(original_function):
"""
If we need to test for 404s or 405s this decorator can prevent the
request class from throwing warnings.
"""
def new_function(*args, **kwargs):
# raise logging level to ERROR
logger = logging.getLogger('django.request')
previous_logging_level = logger.getEffectiveLevel()
logger.setLevel(logging.ERROR)
# trigger original function that would throw warning
original_function(*args, **kwargs)
# lower logging level back to previous
logger.setLevel(previous_logging_level)
return new_function
Run Code Online (Sandbox Code Playgroud)
使用此功能,您可以像这样编写代码:
@prevent_request_warnings
def test_foo(self):
response = self.client.get('/foo/bar/')
self.assertEqual(response.status_code, 200)
response = self.client.get('/foo/bar2/')
self.assertEqual(response.status_code, 404)
Run Code Online (Sandbox Code Playgroud)
实现@jterrace解决方案的一个解决方案是降低setUp和tearDown方法中的日志级别:
class NotFoundTests(TestCase):
def setUp(self) -> None:
"""Reduce the log level to avoid errors like 'not found'"""
logger = logging.getLogger("django.request")
self.previous_level = logger.getEffectiveLevel()
logger.setLevel(logging.ERROR)
def tearDown(self) -> None:
"""Reset the log level back to normal"""
logger = logging.getLogger("django.request")
logger.setLevel(self.previous_level)
Run Code Online (Sandbox Code Playgroud)
只需复制/粘贴到 TestCase 类,并进行检查未找到的页面的测试。
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |