我正在为 Flask 应用程序中的 JSON 端点编写测试用例。import unittestfrom flask import jsonfrom app import create_appclass TestFooBar(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() def test_ham(self): resp = self.client.post('/endpoint', headers={'Content-Type': 'application/json'}, data=json.dumps({'foo': 2, 'bar': 3})) assert resp.status_code == 200 def test_eggs(self): resp = self.client.post('/endpoint', data={'foo': 5, 'bar': 7}) assert resp.status_code == 200 def test_ham_and_eggs(self): with self.app.test_client() as self.client: self.test_ham() self.test_eggs()只是为了了解发生了什么,POST在上面的代码中发送消息的两种方式都有意义吗?特别是,在第一种情况下,我是双 JSON 编码吗?或者,简单地说,test_ham和之间有什么区别test_eggs?有没有?
1 回答
MM们
TA贡献1886条经验 获得超2个赞
您不是对 JSON 进行双重编码,不,因为data
不会将任何内容编码为 JSON。test_ham
发布 JSON,test_eggs
没有。
从 Flask 1.0 开始,Flask 测试客户端支持直接发布 JSON,通过json
关键字参数,使用它来减少样板代码:
def test_ham(self): resp = self.client.post('/endpoint', json={'foo': 2, 'bar': 3}) assert resp.status_code == 200
请参阅Flask测试文档章节的测试 JSON API部分:
json
在测试客户端方法中传递参数会将请求数据设置为 JSON 序列化对象并将内容类型设置为application/json
。
传递字典以data
生成不同类型的请求,application/x-www-form-urlencoded
编码请求就像<form method="POST" ...>
表单一样会从浏览器中生成,并且必须通过对象访问foo
和bar
值。在需要发布 JSON 时不要使用它。request.form
添加回答
举报
0/150
提交
取消