测试Flask响应是否为JSON
问题描述:
如何测试生成的Flask视图响应为JSON?测试Flask响应是否为JSON
from flask import jsonify
@app.route('/')
def index():
return jsonify(message='hello world')
c = app.app.test_client()
assert c.get('/').status_code == 200
# assert is json
答
jsonify
设置内容类型application/json
。此外,还可以尝试解析响应数据作为JSON。如果无法解析,您的测试将失败。
from flask import json
assert response.content_type == 'application/json'
data = json.loads(response.get_data())
assert data['message'] == 'hello world'
通常情况下,这种测试对自己没有意义。你知道这是JS ON自从jsonify
返回时没有错误,并且jsonify
已经由Flask测试。如果它不是有效的JSON,则序列化数据时会收到错误。
答
它有一个python库。
import json
#...
def checkJson(s):
try:
json.decode(s)
return True
except json.JSONDecodeError:
return False
如果你还需要检查它是否是一个有效的字符串,检查边界“S。 你可以在这里阅读帮助的蟒蛇网站https://docs.python.org/3.5/library/json.html。
+2
不要使用'decode',使用'loads'。使用'flask.json',而不是'json',因为它正确处理字节和unicode。不要手动检查字符串。这并不显示如何获取* Flask *响应数据。 – davidism
这会在Python 3中引发编码错误。使用'response.get_data(as_text = True)'来避免这个问题。 –
@MarcoLavagnino如果这是提高编码错误,其他的错误。 'flask.json.loads'可以从字节加载JSON,不需要先将它编码为文本。 – davidism
你说得对,我正在使用'json.loads'并导致错误。我试图帮助别人,但你最终帮助了我!谢谢! –