我有一个单元测试,如果没有像这样进行身份验证,则测试api点是否不可访问:
def test_endpoint_get_unauth(self):
r = self.get('/api/endpoint/1')
self.assertStatusCode(r, 401)
测试通过了,但是nosetests/unittest仍然显示了一个错误,抛出了一个异常,说"未授权"。有办法阻止这一切吗?
完整日志:
ERROR in views [/myenv/lib/python2.7/site-packages/flask_restless/views.py:115]:
Not Authorized
--------------------------------------------------------------------------------
Traceback (most recent call last):
File "/myapp/myenv/lib/python2.7/site-packages/flask_restless/views.py", line 113, in decorator
return func(*args, **kw)
File "/myapp/myenv/lib/python2.7/site-packages/flask/views.py", line 84, in view
return self.dispatch_request(*args, **kwargs)
File "/myapp/myenv/lib/python2.7/site-packages/flask/views.py", line 149, in dispatch_request
return meth(*args, **kwargs)
File "/myapp/myenv/lib/python2.7/site-packages/flask_restless/views.py", line 989, in get
preprocessor(instance_id=instid)
File "/myapp/app/api/api.py", line 16, in check_auth
raise ProcessingException(message='Not Authorized', status_code=401)
ProcessingException
................
----------------------------------------------------------------------
Ran 16 tests in 15.788s
OK
您看到的消息可能来自应用程序日志。
"ERROR"
是事件的日志级别,您需要将记录器阈值设置为更高的值。
假设你的testcase对象在测试客户端应用程序中有一个app
属性,如果您不想看到该测试的错误消息,您可以这样写:
def test_endpoint_get_unauth(self):
import logging
self.app.logger.setlevel(logging.CRITICAL)
r = self.get('/api/endpoint/1')
self.assertStatusCode(r, 401)
详情见https://docs.python.org/2/library/logging.html
您也可以使用nose选项--logging-level=ERROR
来设置每次运行的日志级别。
错误不是来自失败的测试用例,而是来自被测试的应用程序,它抱怨未经授权的访问。
这是很自然的,因为您的测试用例只是试图进行未经授权的访问。
由于被测试的应用程序和测试套件都使用stdout作为输出,这会使您感到困惑。你可以稍微配置一下应用程序的日志记录和测试套件,把它放到不同的文件中,你会看到,谁在说什么。