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