【发布时间】:2020-04-17 22:27:21
【问题描述】:
我正在使用 py.test 使用以下代码测试烧瓶应用程序:
response = flask_app_test_client.post('/users', data=json.dumps(user))
assert response.status_code == 201
assert response.content_type == 'application/json'
assert isinstance(response.json, dict)
assert set(response.json.keys()) >= {'id', 'status', 'created_at', 'updated_at'}
assert response.json['name'] == user['name']
assert response.json['status'] == 'pending'
当某些断言失败时,我会得到这样的结果:
response = test_client.post('/users', data=json.dumps(user))
> assert response.status_code == 201
E assert 400 == 201
E + where 400 = <JSONResponse streamed [400 BAD REQUEST]>.status_code
============== 1 failed, 3 passed in 0.10 seconds ===================
我做了很多 TDD,所以我希望我的测试在开发过程中经常失败。我的问题是断言错误消息在没有其余响应数据(正文、标题等)的情况下是无用的。
我只得到 response.status_code 为 400 的输出,但我没有得到响应正文中的错误描述:{"errors": ["username is already taken", "email is required"]}。理想情况下,我希望在断言失败时完整转储请求和响应(标头 + 正文)。
如何打印每个失败断言的响应摘要?
【问题讨论】:
-
我通常利用
assert关键字的打印功能,所以我在断言之后加上response.json。我会扩展您的断言以使其看起来像assert response.status_code == 201, reponse.json,然后您将看到断言失败时端点返回的内容。如果响应正文没有太大帮助,那么您需要通过在端点代码中放置断点来进行调试。看看stackoverflow.com/a/5142453/7320870