Flask 返回一个正确的列表对象以在 Postman 中进行测试
Posted
技术标签:
【中文标题】Flask 返回一个正确的列表对象以在 Postman 中进行测试【英文标题】:Flask return a proper list object to test in Postman 【发布时间】:2022-01-21 16:46:41 【问题描述】:更新。我实际上做了一个不太复杂的例子
这是我的烧瓶应用程序:
from flask import Flask, Response
from json import dumps
app = Flask(__name__)
@app.route("/test", methods = ["GET"])
def test_func():
result = [
"id": 1,
"field": 2
]
return Response(dumps(result), mimetype='application/json')
if __name__ == '__main__':
app.run()
我试图让它通过邮递员测试:
pm.test("test", () =>
pm.response.to.have.status(200)
pm.expect(pm.response.headers.get("Content-Type")).to.contains("application/json");
const id = pm.collectionVariables.get("id")
const response = pm.response.json();
pm.expect(response).to.be.an("array")
const elem = _.find(response, "id": id )
pm.expect(elem.field).to.be.eq(2)
)
但它仍然是TypeError: Cannot read property 'field' of undefined
,为什么它不能从我的回复中得到一个json?..
我目前正在为学校做一些工作;
我有一个烧瓶应用程序和一些我必须通过的邮递员测试,其中一个请求一组 dicts(类似于 [dict1, dict1,..])
我一直在尝试返回这个:
result = [
"reservationUid": data["reservationUid"],
"status": data["status"],
"startDate": data["startDate"],
"tillDate": data["tillDate"],
"book": book_data,
"library": library_data
]
我使用了jsonify()
、dumps() + mimetype='application/json'
、make_response()
,但没有任何帮助,似乎如果我这样做,邮递员不会将其视为 json 而是视为未定义?
例如,对于return Response(dumps(result), mimetype='application/json')
它返回TypeError: Cannot read property 'status' of undefined
这里是它死亡的测试部分:
const response = pm.response.json();
pm.expect(response).to.be.an("array")
const reservation = _.find(response, "reservationUid": reservationUid )
pm.expect(reservation.status).to.be.eq("RENTED")
pm.expect(reservation.startDate).to.be.not.undefined
pm.expect(reservation.tillDate).to.be.not.undefined
我的响应数据返回看起来像
[
"reservationUid": "f464ca3a-fcf7-4e3f-86f0-76c7bba96f72",
"status": "RENTED",
"startDate": "2021-10-09",
"tillDate": "2021-10-11",
... <some more data here>
]
基本上状态实际上是“已出租”,就像要求的一样。
对于返回带有 many=True 字段的序列化程序数据的 django 应用程序,这样的测试工作得很好,但是由于你不能只在烧瓶中返回一个数组,这变得如此复杂:(
我最好的解决方案是将我的请求重定向到 django 应用程序,但是没有办法从烧瓶中返回正确的 json 数组吗?提前致谢
【问题讨论】:
邮递员的回复是什么? 【参考方案1】:您是否将邮递员的内容类型更改为:
"Content-Type": "application/json"
【讨论】:
是的,有一个测试pm.expect(pm.response.headers.get("Content-Type")).to.contains("application/json");
,它通过了很好
你能通过你的 git 存储库进行我的本地测试吗?
它是一个 github 教室存储库,所以不确定它是否可共享,它也是一个具有 4 个服务的微服务应用程序,但如果你愿意,我可以尝试复制它;我认为这里的问题是从字典列表中制作一个正确的 json,以便邮递员可以阅读它。例如,如果您有一个初始化的数据库并执行类似 Query.all() 之类的操作,然后将其返回,则一切正常
我做了一个更好的例子来展示这一点,请看一下以上是关于Flask 返回一个正确的列表对象以在 Postman 中进行测试的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flask-graphql 返回 Result 字段列表
flask查询User,返回对象列表,提示ypeError: Object of type ‘bytes‘ is not JSON serializable解决办法