JMeter實現Web接口測試,大體可以分為四個步驟





1.2 當線程組內HTTP請求存在API有某些訪問權限的設置,或是需要保留某些狀態,也就是需要讓服務器知道每次訪問的用戶是誰,於是在發送請求的時候需要帶上Cookie。我們可以利用JMeter的配置元件-【HTTP Cookie 管理器】,管理Test Plan運行時的所有Cookie。HTTP Cookie Manager可以自動儲存服務器發送給客戶端的所有Cookie,並在發送請求時附加上合適的Cookie,同時,也可以在HTTP Cookie Manager中手工添加一些Cookie,這些被手工添加的Cookie會在發送請求時被自動附加到請求,所以在線程組內添加一個HTTP Cookie 管理器,后續管許Cookie的問題就可以一勞永逸了,如:



a.名稱/注釋,建議維護成一眼就可以看出請求意圖的相關信息
b.Web服務器:
協議,向目標服務器發送請求時的協議,http/https,不區分大小寫,默認http
服務器名稱或IP,服務器名稱或IP地址
端口號,目標服務器的端口號,默認80,可不填
c.HTTP請求:
方法,是指這個接口的Request Method,JMeter發送Http請求支持很多方法,如:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
自動重定向, 如果選中該選項,當發送HTTP請求后得到的響應是302/301時,JMeter 會自動重定向到新的頁面,但是Jmeter是不記錄重定向的過程內容。只能用於get和head方法,如果是post或者put請求則取樣器不會發送。
跟隨重定向, 默認選中,當響應code是3xx時,自動跳轉到目標地址。與自動重定向不同,Jmeter會記錄重定向過程中的所有請求響應,在查看結果樹時可以看到服務器返回的內容,如有多個跳轉則多個請求都會被記錄下來,此為默認選項。 自動重定向和跟隨重定向的區別只在於是否記錄多個跳轉的請求上
Use keep Alive,當該選項被選中時,jmeter 和目標服務器之間使用 Keep-Alive方式進行HTTP通信,默認選中。
Use multipart/from-data for POST,當發送HTTP POST 請求時,使用Use multipart/from-data方法或者application/x-www-form-urlencoded方法發送,默認不選中。 當入參數需要上傳文件的時候,需要勾選。
Browser-compatible headers,當勾選multipart/form-data時,勾選此項會截掉http請求頭中的Content-Type和Content-Transfer-Encoding,而只發送Content-Disposition部分。
d.同請求一起發送參數:
同請求一起發送參數,JMeter提供了三種方式,Parameters、Body Data以及Files Upload,具體使用哪一個,主要取決於在HTTP信息頭管理器中Content-Type設置的什么類型,詳情可以參考另一隨筆,https://www.cnblogs.com/justyoutiao/p/11385964.html
##這里強調一下兩個問題:
A. 實踐過程中遇到的一個問題,依據HTTP信息頭管理器中設置的Content-Type類型在表格中傳入Parameters格式的參數,返回響應某個Parameter....is not present,實際查看log發現並未傳參,仿效postman,將參數添加到路徑中,然后發送請求,發現傳參成功,正常響應。於是get了一種新的傳參格式——將參數添加到請求的路徑中(詢問開發大佬是因為每個接口實現者方式不同,具體不是特別懂啦~)
B. 上傳文件傳參,實現模式往往是異步的,一個線程下來可能實際結果還沒有出來~。當發現實際響應碼正確,但是實際結果與預期不符合的時候,可以在發送對應請求前,sleep一段時間。實現方式就是在該請求下,添加一個固定定時器,這樣JMeter在發送該請求前,會先等待定時器設置的時間。
Advanced(加強版設置)略過不說
2.2 參數化傳參
一般來說,我們測試過程中不一定能保證數據的穩定或需要構造多個不同的參數進行處理 ,很多時候需要考慮做參數化的處理,一定程度上實現動態構造。簡單說一下JMeter支持的四種參數化傳參方式:
a.函數助手
調用形式:${__function() },如:
打開函數助手對話框,選擇函數__Random(這個函數是隨機函數,生成指定范圍的隨機數),用這個函數隨機生成電話號碼來舉例
HTTP請求中,將函數助手中生成的函數字符串,當作參數的value輸入表單
查看請求,驗證函數傳參成功
b.用戶定義的變量
用戶定義的變量,可以很好的參數化請求中重復出現且相同的變量,如服務器IP地址
線程組-》添加-》配置元件-》用戶定義的變量
后續在HTTP請求表單中,用${URL}當作參數的value輸入就可以實現該變量的參數化了
c.讀取本地化文件進行參數化
線程組-》添加-〉配置元件-》CSV Data Set Config
在請求中,直接使用${key}代替對應的參數,即可實現參數化傳參
d.提取響應中序列化的json信息
JMeter支持 正則表達式提取/json提取器提取 response返回的JSON格式數據
e.利用JDBC Request查詢到的數據傳參
主要可以分為兩步:
(1)設置JDBC連接池(JDBC Connection Configuration)
設置連接池前,需要確認/apache-jmeter-3.2/lib目錄下面有無數據庫驅動jar包,用mysql舉例,本地有jar包,則不需要額外添加,如
當本地沒有對應數據庫的jar包時,需要自己找資源下載(網上資源很多,這里略過),注意jar包跟JMeter版本的關系,下載好的jar可以直接拖到/lib路徑下面,也可以在測試計划里面添加,見圖:
jar包添加好,添加一個JDBC Connection Configuration(配置元件),完成對應的設置
database url: jdbc:mysql://數據庫服務器地址:端口號/數據庫名,在測試過程中遇到過因為編碼問題,查詢條件中的中文字符串不生效導致斷言結果錯誤,所以需要添加編碼方式,設置的與數據庫本身的編碼方式相同即可,我使用的是UTF-8 ,如:jdbc:mysql://host:3306/name?useUnicode=true&characterEncoding=utf8
JDBC Driver class:直接使用 com.mysql.jdbc.Driver
(2)添加JDBC Request (Sampler)
我們可以再添加一個Debug Sampler(調試工具) ,查看返回的各列數據的行數
在HTTP請求中,我們可以使用JDBC Request的返回結果 作為參數的value值傳參了,如:C_1=13042390209
在請求中確認傳參是否是:phoneNumber =C_1





