1.創建一個簡單的測試內容
1.測試目標網站是www.baidu.com
2.測試目的是該網站在負載達到20 QPS時的響應時間
2.建立測試計划
1.啟動JMeter后,JMeter會自動生成一個空的測試計划,用戶可以基於該測試計划建立自己的測試計划。
2. 一個性能測試請求負載是基於一個線程組完成的。一個測試計划必須有一個線程組。測試計划添加線程組非常簡單。在測試計划右鍵彈出下拉菜單(添加-->Threads(Users)--->線程組)中選擇線程組即可。
JMeter中 每個測試計划至少需要包含一個線程組,當然也可以在一個計划中創建多個,這些線程組是同時被初始化並同時執行線程組下的Sampler的。
3.設置基本參數
線程組主要包含三個參數:線程數、准備時長(Ramp-Up Period(in seconds))、循環次數。
1.線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這里也就是設置多少個線程數
2.准備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為20 ,准備時長為10 ,那么需要10秒鍾啟動20個線程。也就是每秒鍾啟動2個線程
3.循環次數:每個線程發送請求的次數。如果線程數為20 ,循環次數為100 ,那么每個線程發送100次請求。總請求數為20*100=2000 。如果勾選了“永遠”,那么所有線程會一直發送請求,一到選擇停止運行腳本
這里我們根據20QPS的負載分別設置這三個參數為20、10、10
4.添加HTTP請求
添加完成線程組后,在線程組上右鍵菜單(添加--->Sampler--->HTTP請求)選擇HTTP請求。對於JMeter來說,取樣器(Sampler)是與服務器進行交互的單元
一個HTTP請求的配置參數主要包括:
1.名稱:本屬性用於標識一個取樣器,建議使用一個有意義的名稱
2.注釋:對於測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息
3.服務器名稱或IP :HTTP請求發送的目標服務器名稱或IP地址
4.端口號:目標服務器的端口號,默認值為80
5.協議:向目標服務器發送HTTP請求時的協議,可以是http或者是https ,默認值為http
6.方法:發送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等
7.Content encoding :內容的編碼方式,默認值為iso8859
8.路徑:目標URL路徑(不包括服務器地址和端口)
9.自動重定向:如果選中該選項,當發送HTTP請求后得到的響應是302/301時,JMeter 自動重定向到新的頁面。
10.Use keep Alive :當該選項被選中時,JMeter 和目標服務器之間使用 Keep-Alive方式進行HTTP通信,默認選中
11.Use multipart/from-data for HTTP POST :當發送HTTP POST 請求時,使用Use multipart/from-data方法發送,默認不選中
12.同請求一起發送參數:在請求中發送URL參數,對於帶參數的URL ,JMeter提供了一個簡單的對參數化的方法
13.同請求一起發送文件:在請求中發送文件,默認不選中,如果用戶只希望獲取頁面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向資源會被下載。
14用作監視器:此取樣器被當成監視器,在Monitor Results Listener 中可以直接看到基於該取樣器的圖形化統計信息。默認不選中
這里我們添加一個百度的HTTPS請求
5.設置qps
(1)JMeter提供了一個非常有用的定時器,稱為Constant Throughput Timer (常數吞吐量定時器),該定時器可以方便地控制給定的取樣器發送請求的吞吐量。右鍵點擊fnng.cnblogs.com ,彈出菜單(添加--->定時器--->Constant Throughput Timer)選擇Constant Throughput Timer
(2)Constant Throughput Timer 的屬性包括:
Target throughput(in samples per minute):目標吞吐量。注意這里是每分鍾發送的請求數,因此,對應測試需求中所要求的20 QPS ,這里的值應該是1200
Calculate Throughput based on :有5個選項,分別是:
This thread only :控制每個線程的吞吐量,選擇這種模式時,總的吞吐量為設置的 target Throughput 乘以線程的數量
All active threads :設置的target Throughput 將分配在每個活躍線程上,每個活躍線程在上一次運行結束后等待合理的時間后再次運行。活躍線程指同一時刻同時運行的線程。
All active threads in current thread group :設置的target Throughput將分配在當前線程組的每一個活躍線程上,當測試計划中只有一個線程組時,該選項和All active threads選項的效果完全相同。
All active threads (shared ):與All active threads 的選項基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程上一次運行結束后等待合理的時間后再次運行
All cative threads in current thread group (shared ):與All active threads in current thread group 基本相同,唯一的區別是,每個活躍線程都會在所有活躍線程的上一次運行結束后等待合理的時間后再次運行
這里為我們設置定時器的Target throughput為1200/分鍾(20 QPS),設置Calculate Throughput based on 的值為All active threads
6.添加聚合報告
腳本的主要部分設置完成后,需要通過某種方式獲得性能測試中的測試結果,在本例中,我們關心的是請求的響應時間。JMeter 中我們可在添加聚合報告,更為直觀的查看測試結果。添加聚合報告,右鍵點擊線程組,在彈的菜單(添加--->監聽器--->聚合報告)中選擇聚合報告
7.執行腳本
剛剛我們設置的參數如下
---------------------------------------------------------------------------------------------------------------------------
線程組:
線程數:20
准備時長:10
循環次數:10
--------------------------------------------------------------------------------------------------------------------------
HTTP請求:
名稱:baidutest
服務器名稱或IP :www.baidu.com
端口號:443
Implementation :java
協議:https
方法:GET
路徑:/
--------------------------------------------------------------------------------------------------------------------------
常數吞吐量定時器:
Target throughput(in samples per minute):1200.0
Calculate Throughput based on :All active threads
---------------------------------------------------------------------------------------------------------------------------
點擊工具欄上的運行按鈕,或者點擊菜單欄“ 運行--->啟動 ” 或者使用快捷鍵ctrl+r 來運行程序。
8.聚合報告
執行后的聚合報告如下圖
其中每列的意義為
label:每個JMeter的http request都有一個name屬性,這里就是name屬性的值
samples:表示這次測試中一共發出了多少個請求,例如這次我們模擬20個用戶,每個用戶迭代10次,那么這里顯示的是200
average:平均響應時間
median:50%用戶的響應時間
90%line:90%用戶的響應時間
min:最小響應時間
max:最大響應時間
error%:本次測試中出現錯誤的請求的數量/請求總數
throughput:吞吐量-每秒完成的請求數
KB/sec:每秒從服務器接收到的數據量
通過結果可知本次測試baidu網站在負載達到20 QPS時的200個請求平均響應時間為61sec,100%通過
接下來我們來看看如何根據我們的場景需要,進行腳本錄制和測試