【发布时间】:2017-06-02 18:28:45
【问题描述】:
[根据https://stackoverflow.com/a/46369945/1021819,标题应指集成测试而不是单元测试]
假设我想测试以下 Flask API(来自here):
import flask
import flask_restful
app = flask.Flask(__name__)
api = flask_restful.Api(app)
class HelloWorld(flask_restful.Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
if __name__ == "__main__":
app.run(debug=True)
将其保存为flaskapi.py 并运行它,在同一目录中我运行脚本test_flaskapi.py:
import unittest
import flaskapi
import requests
class TestFlaskApiUsingRequests(unittest.TestCase):
def test_hello_world(self):
response = requests.get('http://localhost:5000')
self.assertEqual(response.json(), {'hello': 'world'})
class TestFlaskApi(unittest.TestCase):
def setUp(self):
self.app = flaskapi.app.test_client()
def test_hello_world(self):
response = self.app.get('/')
if __name__ == "__main__":
unittest.main()
两个测试都通过了,但是对于第二个测试(在TestFlaskApi 中定义)类,我还没有弄清楚如何断言 JSON 响应符合预期(即{'hello': 'world'})。这是因为它是 flask.wrappers.Response 的一个实例(它可能本质上是一个 Werkzeug 响应对象(参见 http://werkzeug.pocoo.org/docs/0.11/wrappers/)),我还没有找到与 json() 方法等效的 requests Response 对象。
如何对第二个response 的 JSON 内容进行断言?
【问题讨论】:
-
功能测试怎么样,您不希望单独运行服务以在单独的进程中运行测试吗?你将如何模拟数据库,我认为这应该是通过将对象直接传递给烧瓶来模拟请求的功能测试。
标签: python flask integration-testing flask-restful werkzeug