测试Flask响应是否为JSON

时间:2017-02-23 14:45:52

标签: python flask

如何测试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

2 个答案:

答案 0 :(得分:5)

从Flask 1.0开始,response.get_json()会将响应数据解析为JSON或引发错误。

response = c.get("/")
assert response.get_json()["message"] == "hello world"

jsonify将内容类型设置为application/json。此外,您可以尝试将响应数据解析为JSON。如果它无法解析,您的测试将失败。

from flask import json
assert response.content_type == 'application/json'
data = json.loads(response.get_data(as_text=True))
assert data['message'] == 'hello world'

通常,此测试本身没有意义。你知道它是JSON,因为jsonify没有错误地返回,并且jsonify已经被Flask测试了。如果它不是有效的JSON,那么在序列化数据时会收到错误。

答案 1 :(得分:0)

有一个python-library。

import json
#...
def checkJson(s):
    try:
        json.decode(s)
        return True
    except json.JSONDecodeError:
        return False

如果您还想检查它是否是有效字符串,请检查“s”的边界。 您可以在pythons网站https://docs.python.org/3.5/library/json.html上阅读帮助。