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 字段列表

Python 和 Flask 如何返回列表? [复制]

转换对象数组以在javascript中进行排序?

flask查询User,返回对象列表,提示ypeError: Object of type ‘bytes‘ is not JSON serializable解决办法

以 JSON 格式返回 API [重复]

我有一个包含在 ScrollView 中的 ListView 以在标题下显示字符串列表,但无法正确显示