引言
我們在做接口測試的時候經常會忽略數據類型content-type的格式,以及參數Parameters和Body Data的區別和用途。
對於初次接觸接口的同學來說,自己在發送一個http請求時,總會遇到這樣那樣的問題,比如必傳參數不存在啊。
出現這樣類似問題的問題首先排除的應該是content-type是否正確,那什么是content-type呢?
在客戶端和服務端通過http請求交互的過程中,你總得告訴服務端你傳的是什么格式的數據類型吧(方便服務端對數據進行解析)
content-type就是告訴服務器客戶端的數據類似是什么,並且是通過header頭傳給服務端的,如果客戶端傳遞的數據類型是錯誤的,服務器是解析不出,無法驗證的。
所以在測試請求之前,一定要搞清楚http的數據格式是什么類型的。
這里主要講的是Http協議請求方式之Post方法,相對於Get方法而言它們區別在於:
GET:從指定的資源請求數據。
POST:向指定的資源提交要被處理的數據
最直觀的表現就是:
GET把參數包含在URL中,POST通過Request Body傳遞參數將請求整體提交給服務器。所以接口測試時要區分兩種方法對待。
下面介紹POST請求中content-type的三種數據類型:
- content-type:application/x-www-form-urlencoded
- content-type:application/json
- content-type:multipart/form-data
第一種類型
1、【content-type:application/x-www-form-urlencoded】
如果不指定content-type,默認使用此格式。 參數格式:key1=value1&key2=value2。 假設使用Parameters參數格式,而不設置content-type,默認使用此格式。 反之如果設置content-type:application/json,就會報錯。
如圖:
敲黑板:所以使用Parameters參數格式時,要么不設置content-type類型,要么設置content-type:application/x-www-form-urlencoded,不能用content-type:application/json類型去請求,否則報錯!!!
使用content-type:application/x-www-form-urlencoded時,還有一種將報文放在body data里面去請求。
如圖:
第二種類型
2、【content-type:application/json】
以Json格式編碼數據體,方便傳輸結構化數據(相比鍵值對),廣泛用於 ajax 請求。 參數為json格式 : { "key1":"value1", "key2":"value2" }
如圖:
敲黑板:使用Body Data時,Content-Type可傳application/x-www-from-urlencoded或application/json,兩者的區別是數據格式不同。但是如果接口定義的Content-Type數據類型是application/json,那就必須使用application/json去傳遞參數,否則報錯!!!
第三種類型
3、【content-type:multipart/form-data】
需要在表單中進行文件上傳時,就需要使用該格式,這種格式一般很的少。
后續補充實例~
總結
綜上所述,我們日常做接口測試基本上使用的前兩種,這兩種歸結出來就是三種不同場景:
-
application/x-www-form-urlencoded + Parameters
-
application/x-www-form-urlencoded + Body Data
-
application/json + Body Data
-
get請求,直接在url上用"&"拼接參數
Jmeter的Parameters和Body Data兩種參數化方式,一般來說,Get請求用Parameters,Post請求用Body Data。
確切來說對於Post的方法是:普通的post請求和上傳接口,選擇Parameters。
Json和Xml點數據格式請求接口,選擇Body。
詳細來解釋,根據post請求數據的格式,分兩種情況:map格式、json格式。
使用什么數據類型,還要看接口定義的是什么類型,如接口定義的是application/x-www-form-urlencoded這種類型,content-type就得使用這個,反之亦然。否則報錯!
參考文獻1:https://testerhome.com/topics/12687
參考文獻2:https://www.cnblogs.com/insane-Mr-Li/p/10686797.html