Jmeter,一款開源的性能測試工具,提供比較詳細的用戶手冊、API文檔,與Loadrunner用法相似,也支持腳本錄製。這裏以知旅行淘寶下單請求與響應爲例,介紹一下jmeter如何做性能測試。
啓動Jmeter:
啓動jmeter,Mac下允許JMETER_HOME/bin/jmeter.sh腳本,windows下運行JMETER_HOME/bin/jmeter.bat腳本。
添加線程組:
添加測試線程組,選擇測試計劃(右鍵)_添加_Threads_線程組,如圖
線程組配置,根據實際需求設置線程數、線程拉起時間、測試計劃執行時間,其中線程執行之間有三種可選:
- 設置循環測試;
- 配置調度器,設置執行起止時間段;
- 設定爲“永遠”,會一直執行直到強制中斷。如圖
在執行之前我們需要先調試接口,所以先將線程屬性都設置爲1
配置請求:
選中添加的線程組_添加_Sampler_HTTP請求,如圖
設置http請求,填寫服務器名稱or IP、端口號、響應超時時間、協議類型、請求方式,如圖
完整的連接172.16.10.157:8081/sc-taobao-war/taobao/callback.html
如果http請求是請求體,需要添加http信息頭管理器,選中線程組_添加_配置元件_http信息頭管理器,如圖
信息頭管理器配置如圖,點擊添加按鈕,然後添加信息頭中內容的名稱和值。
添加完信息頭管理器,就可以配置http請求,如圖選擇Body Data,然後就可以輸入請求體的內容。
本例子選擇的是直接添加參數發送的方式,可根據接口文檔直接添加參數名稱和值,如圖,淘寶給出的接口文檔
在Jmeter添加對應的參數,如圖
配置好各項參數,在執行之前需要添加監聽,不然查看不到執行結果。
添加監聽器
Jmeter有多個監聽器供選擇,選中線程組_添加_監聽器_,客戶端/服務端的請求響應,最常見的監聽器是察看結果樹、聚合報告(圖形結果對性能測試的結果有一定影響)。
添加完監聽之後,我們就可以嘗試執行請求了。
執行之後點擊察看結果樹,察看執行結果
此時取樣器結果顯示的應答碼是200,應答信息是OK,所以結果判斷是成功的。我們繼續看請求和響應數據,如圖
響應數據是300,表明這個請求失敗了,但是結果樹顯示卻是成功。如何讓結果樹顯示我們需要的正確結果了?這時我們需要用到另一樣東西,響應斷言。
響應斷言:
選中線程組_添加_斷言_響應斷言
選擇添加,然後輸入需要判斷成功的響應數據;再次執行請求,察看結果樹。
當響應數據正確時,如圖
此時表示結果能正確顯示,同時該接口也調試成功。
本例中的參數值是固定值,也可以使用函數或者參數化,如例子中的時間可以用時間函數${__time(yyyy-MM-dd HH:mm:ss,)} 2016-10-25 17:28:16 來顯示當前時間。
參數化設定:
Jmeter參數化有多種方法,這裏介紹一種比較使用的方法,採用文件讀取方式,選中線程組_添加_配置元件_CSV Data Set Config,如圖
CSV Data Set Config參數化配置,以行爲單位讀取參數化文件,比參數化函數_CSVRead()和_StringFromFile()更方便使用,具體配置如圖
Filename: 參數項文件,可以採用絕對路徑和相對路徑;
File Encoding: 文件的編譯方法,可以爲UTF-8或者是GB2312等,需要與參數化文件的
編碼方式一致
Variable Names:文件中各列所表叔的參數項,如:mobile,name,num,各項之間用逗
號隔開,參數項名稱應與HTTP請求中的參數項保持一致。
Delimiter: 參數分隔符,如文件中使用的是逗號分隔符則填寫逗號;如使用TAB鍵,則
填寫\t
Allow quoted data?:是否允許引用數據,設置爲flase,避免引起亂碼;
Recycle on EOF?:當讀取到文件尾處,是否從頭讀取,可以爲true或者flase;
Stop thread on EOF?:當Recycle on EOF?一項爲false時起效;true=當讀取到文件結尾,停
止進程
Sharing mode:共享組,方便起見,選擇“ALL threads”。
CSV文件內容如圖
HTTP請求參數配置如圖
聚合報告:
性能測試結果最主要的結論來源就是聚合報告。
#Samples:請求總數,表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那麼這裏顯示100
Average:平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec