pytest.requests(异常)不适用于flask app.post



我有一个类似的文件夹

python
├── foo
│   ├── __init__.py
│   └── web
│       ├── __init__.py
│       ├── api
│       │   ├── __init__.py
│       │   └── helper_api.py
│       └── server.py         
└── test_server.py
├── test_helper_api.py

helper_api.py类似

@helper_api.route("/helper", methods=['POST'])
def helper():
data = request.get_json(force=True, silent=True, cache=True)
if data is None:
raise QueryParseException("JSON-formatted query is required, none found")

在test_helper_api.py中,我有

import ......
from foo.web.api.helper_api import QueryParseException
class TestClass(object):
@pytest.fixture
def client(self, request):
self.client = server.app.test_client()
return self.client
def test_helper_api(self, client):
with pytest.raises(QueryParseException):
client.post('/helper')

当我运行测试类时,代码在client.post失败,引发了一个异常,但pytest未能捕获它。

---------------------------------------------------- Captured log call -----------------------------------------------------
app.py                    1761 ERROR    Exception on /helper [POST]
Traceback (most recent call last):
File "/Users/...personal path.../flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
.......
File "/Users/...personal path.../foo-1.0.0-py3.6.egg/foo/web/api/helper_api.py", line 12, in precheck
raise QueryParseException("JSON-formatted query is required, none found")
foo.web.api.helper_api.QueryParseException: JSON-formatted query is required, none found

为什么pytest没有捕捉到这个异常?

Flask测试客户端是一个测试客户端,用于测试当您向端点发出请求时,用户端会发生什么。pytest没有也不应该捕获异常的原因是错误发生在服务器端,用户不应该有服务器端异常。

相反,为了测试QueryParseException是否在服务器端正确引发,您可以断言client.post('/helper')的状态代码。同时,在服务器端,您可以给出错误消息和状态代码,让客户端知道问题所在。

相关内容

最新更新