我正在為 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
提交
取消