nosetests/unittest测试通过时仍显示错误?
我有一个单元测试,用来检查如果没有认证的话,某个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
3 个回答
-1
这个错误不是因为测试用例失败了,而是因为被测试的应用程序在抱怨没有权限访问。
这很正常,因为你的测试用例就是在尝试进行未经授权的访问。
由于被测试的应用程序和测试套件都在使用标准输出(stdout)来显示信息,这让你感到困惑。你可以尝试调整一下应用程序和测试套件的日志设置,把它们的输出分别放到不同的文件里,这样你就能清楚地看到是谁在说什么了。
0
你可以使用nose的选项 --logging-level=ERROR
来设置每次运行时的日志级别。
2
你看到的这个信息很可能是来自应用程序的日志记录。
"ERROR"
是事件的日志级别,你需要把日志记录的阈值设置得高一些。
假设你的测试用例对象有一个 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