【问题标题】:pytest - accessing flask response parameters [duplicate]pytest - 访问烧瓶响应参数
【发布时间】:2021-03-02 13:15:46
【问题描述】:

我正在编写代码,以测试烧瓶 REST 服务器。

服务器的响应之一是:

return make_response(json.dumps({'myName': userName}), 200)

我可以通过以下方式访问响应的状态代码:

response.status_code

但是我如何访问服务器响应的 myName 参数呢?

【问题讨论】:

  • 你可以使用response.json()['myName']
  • @Macintosh_89 如果我使用 response.myName 会怎样?
  • 我原以为会抛出错误,因为您正在发送 json 响应,因此您需要在访问 json 对象之前对其进行解析。为什么不能使用response.json()['myName']
  • 我明白了:TypeError: 'NoneType' object is not callable, on your line.
  • response.json() 的输出是什么?假设您使用的是requests?您的服务器似乎没有发回 JSON。

标签: json python-3.x parsing python-requests


【解决方案1】:

这个问题和 Pytest 关系不大。您所做的只是将 JSON 正文解析为字典并访问其属性。这一切都可以通过 requests 库和 Python 本身来实现。

我建议阅读请求文档here,在您的示例中第一个代码块就足够了。

因此,您的问题的解决方案是:

import requests

my_name_property = requests.get("server_url").json()["myName"]

或更多步骤:

import requests

response = requests.get("server_url")
response_body = response.json()
my_name_property = response_body["myName"]

您不能使用response.myName,这不是您在 Python 中访问字典属性的方式。这将适用于例如Python 或 Javascript 中的 namedtuple。但在 Python 中使用字典时不是这样,这是上面示例中 json() 方法返回的内容。

如果某些东西不起作用,我建议使用 Postman 或任何其他此类客户端来弄清楚 API 上发生了什么、如何调用它、你得到什么响应、采用什么结构,一旦你理解了它,就写Python 中的一些测试。

【讨论】:

  • 用 myFileId = json.loads(response.data) 解决了
  • 也是一个选项,尽管您正在使用另一个模块 (json),其中 requests 就足够了。
猜你喜欢
  • 2020-12-12
  • 2019-01-04
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多