【Apache JMeter】JMeter接口压测实例
Apache JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設計用于Web應用測 試但后來擴展到其他測試領域。 它可以用于測試靜態和動態資源例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、 數據庫, FTP 服務器, 等等。JMeter 可以用于對服務器、網絡或對象模擬巨大的負載,來在不同壓力類別下測試它們的 強度和分析整體性能。另外,JMeter能夠對應用程序做功能/回歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。
1、本次的壓測接口
接口調用方法:POST
接口的請求URL地址:
http://xxx.xxx.xxx.xx:xx.businessService?username=%E9%80%9A%E8%AE%AF%E5%BD%95%E6%9F%A5%E8%AF%81%7F
接口入參:
username(必填項)
imageField.x(可選項)
imageField.y(可選項)
返回數據:查詢人員的通訊錄信息,包括:部門、員工號、VOIP號碼、電信號碼、手機、Email、傳真
2、使用JMeter進行接口測試
2.1 下載并打開bin目錄下的jmeter.bat文件
2.2 添加線程組
在“測試計劃”上鼠標右鍵添加–>threads(Users)–>線程組,添加測試場景設置組件,接口測試中一般設置為1個“線程數”,根據測試數據的個數設定“循環次數”;
2.3 添加Http請求默認值
組件,在上步的線程組上右鍵添加–>配置元件–>HTTP請求默認值(當所有的接口測試的訪問域名和端口都一樣時,可以使用該元件,一旦服務器地址變更,只需要修改請求默認值即可);
2.3 HTTP請求構造
在“線程組”右鍵–>添加–>samlper–>“HTTP 請求”,在HTTP請求設置頁面,錄入被測接口的詳細信息,包括請求路徑,對應的請求方法,以及隨請求一起發送的參數列表,配置如下:
2.4 測試報告配置
在“線程組”右鍵–>添加–>監聽器->查看結果樹、用表格查看結果、Summary Report三種結果的報告展示,點擊運行后,即可看到運行結果,結果如下:
從上述結果返回可以看出,使用該組入參測試,返回的結果有兩個,另外在返回數據展示方面,除了上述默認的Text形式外,還可以選擇HTML形式,更直觀,如下:
另外的表格查看結果,選取一個展示,如下
2.5 輸入部分參數化
在實際測試中,不可能查詢一個返回輸入一組測試值,在上線前的壓測中測試數據會有很多,故可以引入參數化的概念,讓一條用例循環執行,直到所有測試數據均測試完成。
參數化是自動化測試腳本的一種常用技巧。簡單來說,參數化的一般用法就是將腳本中的某些輸入使用參數來代替,在腳本運行時指定參數的取值范圍和規則。這樣,腳本在運行的時候就可以根據需要選取不同的參數值作為輸入。這種方式通常被稱為數據驅動測試(data driven test),參數的取值范圍被稱為數據池(data pool)。
JMeter的test plan中支持如下4種參數化方式:
1、函數助手:_CSVRead
2、CSV Data Set Config:CSV數據控件
3、User Defined Variables:用戶定義的變量
4、User Variables:用戶參數
首先新建一個測試腳本,可以通過工具(badboy)錄制或者自己手動編寫。登錄請求的界面如下:
這里我們對登錄的用戶名密碼進行參數化,將用戶名和密碼寫入TXT文檔,保存為.dat格式,編碼類型選擇UTF-8;因為配置元件-CSV Data Set Config對參數化的格式要求比較嚴格,用戶名和密碼需要一一對應,之間用半角英文逗號隔開;
然后將保存的.dat文件放入計算機的某個盤里,這里我放入路徑為:F:\jmeter\csvtest.dat。
3、JMeter參數化
在JMeter參數化中較常用的兩種方法:函數助手:_CSVRead和CSV Data Set Config:CSV數據控件
3.1 函數助手:_CSVRead
點擊JMeter的界面,功能欄選項→ 函數助手對話框→ _CSVRead;
說明:
CSV file to get values from | *alias:CSV文件取值路徑,即這里需要寫入之前的需要參數化的參數的文件路徑
CSV文件列號| next|*alias:文件起始列號:CSV文件列號是從0開始的,第一列為0,第二列為1,以此類推。。。
函數字符串:即生成的參數化后的參數,可以直接在登陸請求中的參數中引用,第一列為用戶名,函數字段號為0,第二列為密碼,函數字段號為1,以此類推進行修改使用即可;
替換參數化后的參數,然后修改線程數,執行腳本,通過監聽器里結果樹的請求內容可以看到請求的參數都是參數化后的數據。
3.2 配置元件——CSV Data Set Config:CSV數據控件
點擊線程組添加配置元件→ CSV Data Set Config:
說明:
Filename:F:\jmeter\csvtest.dat文件名,保存參數化數據的文件目錄,可選擇相對或者絕對路徑(建議填寫相對路徑,避免腳本遷移時需要修改路徑);
File encoding:UTF-8,F:\jmeter\csvtest.dat文件的編碼格式,在保存時保存編碼格式為UTF-8即可;
Variable Names(comma-delimited):對對應參數文件每列的變量名,類似excel文件的文件頭,起到標示作用,同時也是后續引用的標識符,建議采用有意義的英文標示; (如:有幾列參數,在這里面就寫幾個參數名稱,每個名稱中間用分隔符分割,這里的 user,pwd,可以被利用變量名來引用:{user},{pwd};
Delimitet:參數文件分隔符,用來在“Variable Names”中分隔參數,與參數文件中的分隔符保持一致即可;
Allow quote data:是否允許引用數據,默認false,選項選為“true”的時候對全角字符的處理出現亂碼 ;
Recycle on EOF?:是否循環讀取參數文件內容;因為CSV Data Set Config一次讀入一行,分割后存入若干變量中交給一個線程,如果線程數超過文本的記錄行數,那么可以選擇從頭再次讀入;
△ Ture:為true時,當已讀取完參數文件內的測試用例數據,還需繼續獲取用例數據時,此時會循環讀取參數文件數據(即:讀取文件到結尾時,再重頭讀取文件);
△False:為false時,若已至文件末尾,則不再繼續讀取測試數據;通常在“線程組線程數* 線程組循環次數>參數文件行數”時,選用false(即:讀取文件到結尾時,停止讀取文件);
Stop thread on EOF?:當Recycle on EOF為False時(讀取文件到結尾),停止進程,當Recycle on EOF為True時,此項無意義;
△若為ture,則在讀取到參數文件行末尾時,終止參數文件讀取線程;
△若為false,此時線程繼續讀取,但會請求錯誤,因此時讀取的數據為EOF;
Sharing mode:共享模式,即參數文件的作用域,有以下幾種方式:
△All threads:當前測試計劃中的所有線程中的所有的線程都有效,默認;
△Current thread group:當前線程組中的線程有效;
△Current thread:當前線程有效;
完成之后,將剛才生成的參數寫入參數對應的值里面:
以上兩種常見的參數化方法,推薦使用CSV控件方法(因為函數助手參數化功能相比其較弱)。
3.3 配置元件—User Defined Variables:用戶定義的變量
點擊線程組添加配置元件→ User Defined Variables(用戶定義的變量):
如上圖所示,在該參數組中已經定義了兩個參數,通過界面下方的添加、刪除按鈕可以向參數列表增加和刪除參數,Up和Down可以上下移動參數的位置;
PS:User Defined Variables中定義的參數值在test plan執行過程中不能發生取值的改變,因此一般僅將test plan中不需要隨迭代發生改變的參數(只取一次的參數)設置在此處;例如:被測應用的host和port值。
3.4 前置處理器——User Variables:用戶參數
點擊線程組添加前置處理器——User Variables(用戶參數):
如上圖所示,在該參數組中已經設置了兩個參數,username和password分別有2組不同的取值,通過頁面下方的四個按鈕,可以增加刪除參數的可能取值。
PS:User Variables中設置的參數可以在test plan執行過程中發生變化。
4、總結
以上就是jmeter參數化的四種方式,其中:
1、函數助手_CSVRead的參數化功能相比CSV Data Set Config較弱;
2、CSV Data Set Config適用于參數取值范圍較大的時候使用,該方法具有更大的靈活性;
3、User Defined Variables一般用于test plan中不需要隨請求迭代的參數設置;
4、User Variables適用于參數取值范圍很小的時候使用;
PS:相比于loadrunner來說,jmeter參數化有以下不同:
1.jmeter參數文件第一行沒有列名稱
2.參數文件的編碼,盡量保存為UTF-8(編碼問題在使用CSV Data Set Config參數化時要求的比較嚴格)
3.Jmeter的參數化沒有LoadRunner做的出色,它是依賴于線程設置的(只有CSV Data Set Config參數化方法才有)
總結
以上是生活随笔為你收集整理的【Apache JMeter】JMeter接口压测实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.io.IOException:
- 下一篇: 【Redis学习】Redis开启多个端口