nosetests/unittest测试通过时仍显示错误?

0 投票
3 回答
981 浏览
提问于 2025-04-18 06:47

我有一个单元测试,用来检查如果没有认证的话,某个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

撰写回答