JMeter接口測試


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

1.添加線程組
測試計划-》Threads(Users)-》線程組
 
線程組頁面,主要有三個參數需要設置
 
##使用補充:
  1.1 當線程組內的HTTP請求是發向同一個服務器時,可以在線程組內添加配置元件-【HTTP請求默認值】,后續就不需要在每個HTTP請求中都維護服務器這一項信息,如:
 

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

 

2.添加HTTP請求
線程組-》添加-》Sampler-》HTTP請求
 
2.1 HTTP請求設置說明:

a.名稱/注釋,建議維護成一眼就可以看出請求意圖的相關信息

b.Web服務器:

  協議,向目標服務器發送請求時的協議,http/https,不區分大小寫,默認http

  服務器名稱或IP,服務器名稱或IP地址

  端口號,目標服務器的端口號,默認80,可不填

c.HTTP請求:

  方法,是指這個接口的Request Method,JMeter發送Http請求支持很多方法,如:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

  路徑,URL地址,不包含服務器地址和端口
  Content encoding ,內容的編碼方式,默認值為iso8859;注意Content encoding並不能影響返回結果,當出現亂碼的情況,一般是Content encoding沒有設置,常用UTF-8

  自動重定向, 如果選中該選項,當發送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

3.添加響應斷言
HTTP請求-〉添加-》斷言-〉響應斷言
  斷言很好的解決了人眼對比對接口返回的數據問題。
  Jmeter提供了豐富的斷言功能,可以用於檢查響應數據與預期是否一致,可以用作接口自動化測試的結果校驗。對於一次請求,如果通過的話,斷言結果中只會打印一行請求的名稱;如果失敗,則除了請求的名稱外,還會有一行失敗的原因(不同類型的斷言,結果不同),也可以幫助我們定位返回值錯誤的內容。此外,一個Sampler可以添加多個斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了,那么才算request成功。
  常用的斷言方式有:
a.響應斷言-響應文本,檢查校驗響應中的文本(關鍵詞)
b.不僅僅用響應斷言來匹配預期結果 。 其實用另外接口的響應 也可以判斷上一個接口的邏輯是否正確
c. 使用JDBC Request進行數據庫操作,校驗SQL執行結果跟響應返回數據是否一致,判斷結果是否正確,返回結果包含一個或幾個斷言字段,那么就能斷言測試通過了
 
3.1 實踐使用記錄:
  a. 響應斷言-響應文本,當模式匹配規則選擇的是-包括&響應文本包含中文時,響應文本就必須是純文本,不可以有其他的東西
 
 
4.添加監聽器
線程組-》添加-〉監聽器-》察看結果樹
啟動測試,就可以在結果樹中,看見本線程all請求的結果了。
 
##感受體會##
  1.接口測試本質上還是數據的表演【數據】
  2.JMeter接口測試過程大致划分為:線程組-》HTTP請求-》斷言-》結果分析,難點應該在http請求參數的添加,還有斷言的選擇,即如何傳入參數,以及如何根據響應來判斷結果的正確性,即實際結果與預期結果的比對


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM