如何将集成测试(而非单元测试)应用于Flask RESTful API
假设我想测试以下Flask API(从此处开始):
import flaskimport 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 unittestimport 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
如何对第二个的JSON内容进行断言response
?
回答:
我发现可以将JSON数据应用于方法json.loads()
的输出get_data()
:
import unittestimport flaskapi
import requests
import json
import sys
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('/')
self.assertEqual(
json.loads(response.get_data().decode(sys.getdefaultencoding())),
{'hello': 'world'}
)
if __name__ == "__main__":
unittest.main()
两项测试均按要求通过:
..----------------------------------------------------------------------
Ran 2 tests in 0.019s
OK
[Finished in 0.3s]
以上是 如何将集成测试(而非单元测试)应用于Flask RESTful API 的全部内容, 来源链接: utcz.com/qa/414298.html