1. 程式人生 > >Jmeter3.1介面測試使用技巧

Jmeter3.1介面測試使用技巧

本文主要總結windows下使用apache-jmeter-3.1測試介面時使用的技巧。因將各點寫在不同的文章,不易查詢,遂整理在一個篇章裡,篇幅略長。

一、Config Element(配置元件)

1.http資訊頭管理器

JMeter不是瀏覽器,因此其行為並不和瀏覽器完全一致。這些JMeter提供的配置元件中的HTTP屬性管理器用於儘可能模擬瀏覽器行為,在HTTP協議層上傳送給被測應用的http請求

  • HTTP Request Defaults(請求預設值)
      用於設定其作用範圍內的所有HTTP的預設值,可被設定的內容包括HTTP請求的host、埠、協議等
    在這裡插入圖片描述
  • HTTP Authorization Manager
    (授權管理器)
      用於設定自動對一些需要NTLM驗證的頁面進行認證和登入
  • HTTP Cache Manager
      用於模擬瀏覽器的Cache行為。為Test Plan增加該屬性管理器後,Test Plan執行過程中會使用Last-Modified、ETag和Expired等決定是否從Cache中獲取相應的元素
    在這裡插入圖片描述
  • HTTP Cookie Manager(cookie管理器)
      用於管理Test Plan執行時的所有Cookie。HTTP Cookie Manager可以自動儲存伺服器傳送給客戶端的所有Cookie,並在傳送請求時附加上合適的Cookie
      同時,使用者也可以在HTTP Cookie Manager中手工新增一些Cookie,這些被手工新增的Cookie會在傳送請求時被自動附加到請求
    在這裡插入圖片描述
  • HTTP Header Manager(資訊頭管理器)
      用於定製Sampler發出的HTTP請求的請求頭的內容。不同的瀏覽器發出的HTTP請求具有不同的Agent
      訪問某些有防盜鏈的頁面時需要正確的Refer…這些情況下都需要通過HTTP Header Manager來保證傳送的HTTP請求是正確的
    在這裡插入圖片描述

2.Counter(計數器)

在這裡插入圖片描述
  從18000329開始,每次遞增+1,一直到18005429為止,格式是00000000,引用該值為${sno}

  • 不勾"Track…"
    與執行緒無關,使用者#1 獲取值為1,使用者#2獲取值為2;
  • 勾選"Track…",不勾"Reset…"
    每個執行緒從18000329開始取值,且遞增;
  • 勾選"Track…",勾選"Reset…"
    每個執行緒每迭代都取18000329(即每次執行緒組迭代,都會重置計數器的值)。

3.CSV Data Set Config

在這裡插入圖片描述
在這裡插入圖片描述

  • Allow quoted data?
    當引數值包含雙引號如"1,true取值"1,false取值1
  • Recycle on EOF?(到了檔案尾是否迴圈)
    True:繼續從檔案第一行開始讀取
    False:不再迴圈
  • Stop thread on EOF?(到了檔案尾是否停止執行緒)
    True:停止
    False:不停止
    注:當Recycle on EOF設定為True時,此項設定無效
  • sharing mode
  • All threads
      計劃中所有執行緒,假如說有執行緒1到執行緒n (n>1),執行緒1取了一次值後,執行緒2取值時,取到的是csv檔案中的下一行,即與執行緒1取的不是同一行。
  • Current thread group
      當前執行緒組,假設有執行緒組A、執行緒組B,A組內有執行緒A1到執行緒An,執行緒組B內有執行緒B1到執行緒Bn。取之情況是:執行緒A1取到了第1行,執行緒A2取第2行,現在B1取第1行,執行緒B2取第2行。
  • Current thread
      當前執行緒。假設測試計劃內有執行緒1到執行緒n (n>1),則執行緒1取了第1行,執行緒2也取第1行。

4.JDBC Connection Configuration

在這裡插入圖片描述

  • Variable name(變數名稱)
      與JDBC Request的Variable name保持一致
  • Max Number of Connections(該資料庫連線池的最大連線數)
      一般可設定為0,意思是每個執行緒都使用單獨的資料庫連線,執行緒之間資料庫連線不共享
  • Time Between Eviction Runs (ms)
      在空閒物件驅逐執行緒執行期間,可以休眠的毫秒數。當非正值時,將執行無空閒物件驅逐器執行緒。(預設為“60000”,1分鐘)(如果當前連線池中某個連線在空閒了time Between Eviction Runs Millis時間後任然沒有使用,則被物理性的關閉掉。
  • Transaction Isolation
      事務間隔級別設定
  • Test While Idle
      當空閒的時候測試連線是否斷開
  • Soft Min Evictable Idle Time(ms)
      最少的時間連線可能在池中閒置,然後才有資格被閒置的物件驅逐出去,額外的條件是至少在池中保持連線。預設值為5000(5秒)
  • Validation Query(驗證查詢)
      檢驗連線是否有效(資料庫重啟後之前的連線都失效,需要驗證查詢)
      在這裡插入圖片描述
    配合Sample裡的JDBC Request使用
    在這裡插入圖片描述
  • Query Type
  • Select 選擇Select Statement;
  • Insert, Update, Delete 選擇 Update Statement.
  • 如果使用預編譯(語句中帶問號)必須選擇 Prepared Select(Update) Statement
  • Parameter values(引數值)
      選擇Prepared或Callable 時必填,多個值時使用逗號分隔,數量必須與sql語句中的引數個數相同。
  • Parameter types(引數型別)
      多個值時使用逗號分隔。數量必須與引數值相同。常見的比如varchar, int。
  • Variable Names(查詢結果變數名稱)
      每個欄位都可以設定一個變數,逗號分隔。
  • Result variable name(結果變數名稱)
      將所有的查詢結果儲存到一個變數中。這是一個List<Map<String,Object>>型別的變數。查詢結果每行存為一個Map, 欄位名為 key, 欄位內容為value.比如要bean shell 中可以這樣呼叫:
      columnValue = vars.getObject(“resultObject”).get(0).get(“Column Name”);
  • Handle ResultSet
      Store As String(預設)、Store As Object、Count Record

JDBC Request例項
在這裡插入圖片描述
在這裡插入圖片描述
引用值
  ${sno_1} : 19000124
  ${sno_2} : 19000205
  ${name_1}: 雷小贇
  ${name_2}: 我
注:單條sql末尾無需分號

新增需要的驅動jar包

  • 方式1:直接將jar包複製到jmeter的lib目錄
    mysql資料庫:無需引入其他資料庫驅動jar包。
    sql server資料庫:下載sqljdbc4.jar 放到 jmeter根目錄的lib目錄下
    oracle資料庫:將oracle資料的安裝目錄下面的\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
    放到jmeter根目錄下的lib目錄下
  • 方式2:通過Test Plan 在這裡插入圖片描述
    注:位置不能貼上,只能通過"瀏覽"來操作

執行多條sql語句
1.要在【JDBC Connection Configuration】的DataBase URL後面加引數:
 jdbc:mysql://192.168.0.183:3306/mysql?allowMultiQueries=true
2.【JDBC Request】Query Type一定要選擇 Callable statement
在這裡插入圖片描述

二、Logic Controller(邏輯控制器)

1.Once Only Controller(僅一次控制器)

該控制器下的子結點對每個執行緒只執行一次,相當於LR中Vuser的init,登入常常放於此控制器下。如
在這裡插入圖片描述

2.If Controller(If 控制器)

在這裡插入圖片描述

  • 勾選"Interpret…"

  • 在Condition輸入框中,需將判斷條件解釋為變量表達式,並使用__jexl3函式或__groovy函式對該變量表達式求值為true/false,如
    在這裡插入圖片描述

  • 可輸入值為true/false的表示式
    如設定了變數test為true
    在這裡插入圖片描述

  • 可填true和false

  • 勾選"Evaluate…"
    在每個子結點執行前都會計算表示式

三、Post Processors(後置處理器)

1.Regular Expression Extractor(正則表示式)

在這裡插入圖片描述

  • APPly to
  • Main sample and sub-samples
      作用於父節點的取樣器及對應子節點的取樣器
  • Main sample only
      僅作用於父節點的取樣器
  • Sub-samples only
      僅作用於子節點的取樣器
  • JMeter Variable
      作用於jmeter變數(輸入框內可輸入jmeter的變數名稱),從指定變數值中提取需要的值。
  • Field to check
  • Body(響應報文的主體)
  • Body(unescaped)
      主體,響應的主體內容且替換了所有的html轉義符,注意html轉義符處理時不考慮上下文,因此可能有不正確的轉換,不太建議使用
  • Body as a Document
      從不同型別的檔案中提取文字,注意這個選項比較影響效能
  • Response Headers(響應資訊頭)
  • Request Headers(請求資訊頭)
  • URL(統一資源定位符)  
      Internet上用來描述資訊資源的字串
  • Response Code(響應狀態碼)
      比如200、404等
  • Response Message(響應資訊)
  • Reference Name
      引用值為${orderNo}
  • Regular Expression
      ():括起來的部分就是要提取的。
      .:匹配任何字串。
      +:一次或多次。
      ?:在找到第一個匹配項後停止
  • Template
      用$$引用,如果在正則表示式中有多個取值,則可以是$2$ $3$等等,表示解析到的第幾個值給orderNo。如:
      $1$表示解析到的第1個值
  • Match No.(0 for Random)
      0代表隨機取值,正數n則表示取第n個值(比如1代表取第一個值),負數則表示提取所有符合條件的值,通常情況下填0
  • Default Value
      如果引數沒有取得到值,那預設給一個值讓它取。

提取多個字串
在這裡插入圖片描述
引用的值將會被設定:
${msg}:   true成功
${msg_g0}:  success":true,“result”:0,“msg”:“成功”
${msg_g1}:  true
${msg_g2}:  成功

四、Assertions

1.Response Assertion

在這裡插入圖片描述
注:判斷response包含000000或400016都為真

  • Pattern Matching Rules
  • Contains
    如果文字包含正則表示式模式則為true
  • Matches
    如果整個文字匹配正則表示式模式則為true
  • Equals
    如果整個文字等同於模式字串(大小寫敏感)則為true
  • Substring
    如果文字包含模式字串(大小寫敏感)則為true
  • Not
    用於反轉檢查結果

五、Random隨機函式

Options>>Function Helper Dialog,填入值,點選Generate
在這裡插入圖片描述