上一節中,我們瞭解了jmeter的一此主要元件,那麼這些元件如何使用到效能測試中呢。這一節建立一個簡單的測試計劃來使用這些元件。該計劃對應的測試需求。
測試目的是該網站在負載達到20 QPS 時的響應時間。
QPS 解釋
QPS : Query Per Second 每秒查詢率。是一臺查詢伺服器每秒能夠處理的查詢次數。在因特網上,作為域名系統伺服器的機器的效能經常用每秒查詢率來衡量。
為了達成預期的測目的,需要需要在jmeter中建立一個測試計劃。因為本次測試僅要求完成對fnng.cnblogs.com 和 tt-topia.rhcloud.com 兩個部落格首頁請求,因此只需要使用HTTP Request Sampler 即可。
建立測試計劃
啟動jmeter後,jmeter會自動生成一個空的測試計劃,使用者可以基於該測試計劃建立自己的測試計劃。
新增執行緒組
一個效能測試請求負載是基於一個執行緒組完成的。一個測試計劃必須有一個執行緒組。測試計劃新增執行緒組非常簡單。在測試計劃右鍵彈出下拉選單(新增-->Threads(Users)--->執行緒組)中選擇執行緒組即可。
jmeter中 每個測試計劃至少需要包含一個執行緒組,當然也可以在一個計劃中建立多個執行緒組,那麼多個執行緒組之間又會怎樣的順序執行(序列還是並行)?在測試計劃下面多個執行緒是並行執行的,也就是說這些執行緒組是同時被初始化並同時執行執行緒組下的Sampler的。
執行緒組主要包含三個引數:執行緒數、準備時長(Ramp-Up Period(in seconds))、迴圈次數。
執行緒數:虛擬使用者數。一個虛擬使用者佔用一個程式或執行緒。設定多少虛擬使用者數在這裡也就是設定多少個執行緒數。
準備時長: 設定的虛擬使用者數需要多長時間全部啟動。如果執行緒數為20 ,準備時長為10 ,那麼需要10秒鐘啟動20個執行緒。也就是每秒鐘啟動2個執行緒。
迴圈次數:每個執行緒傳送請求的次數。如果執行緒數為20 ,迴圈次數為100 ,那麼每個執行緒傳送100次請求。總請求數為20*100=2000 。如果勾選了“永遠”,那麼所有執行緒會一直髮送請求,一到選擇停止執行指令碼。
設定合理的執行緒數對於能否達到測試目標有決定性的影響。在本例中,要求得到網站首頁在20 QPS 負載情況下的響應時間,如果如果執行緒數量設定的過小,則很可能無法達到設定的QPS要求。另外,設定合理的迴圈次數也很重要,除了上面介紹的固定迴圈次數與永遠外;也可以靈活的選擇設定測試執行時間。勾選“排程器”,進行排程器配置。
新增HTTP請求
新增完成執行緒組後,線上程組上右鍵選單(新增--->Sampler--->HTTP請求)選擇HTTP請求。對於jmeter來說,取樣器(Sampler)是與伺服器進行互動的單元。一個取樣器通常進行三部分的工作:
向伺服器傳送請求
記錄伺服器的響應資料
記錄相應時間資訊
一個HTTP請求有著許多的配置引數,下面將詳細介紹:
名稱:本屬性用於標識一個取樣器,建議使用一個有意義的名稱。
註釋:對於測試沒有任何作用,僅使用者記錄使用者可讀的註釋資訊。
伺服器名稱或IP :HTTP請求傳送的目標伺服器名稱或IP地址。
埠號:目標伺服器的埠號,預設值為80 。
協議:向目標伺服器傳送HTTP請求時的協議,可以是http或者是https ,預設值為http 。
方法:傳送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
Content encoding :內容的編碼方式,預設值為iso8859
路徑:目標URL路徑(不包括伺服器地址和埠)
自動重定向:如果選中該選項,當傳送HTTP請求後得到的響應是302/301時,JMeter 自動重定向到新的頁面。
Use keep Alive : 當該選項被選中時,jmeter 和目標伺服器之間使用 Keep-Alive方式進行HTTP通訊,預設選中。
Use multipart/from-data for HTTP POST :當傳送HTTP POST 請求時,使用Use multipart/from-data方法傳送,預設不選中。
同請求一起傳送引數 : 在請求中傳送URL引數,對於帶引數的URL ,jmeter提供了一個簡單的對引數化的方法。使用者可以將URL中所有引數設定在本表中,表中的每一行是一個引數值對(對應RUL中的 名稱1=值1)。
同請求一起傳送檔案:在請求中傳送檔案,通常,HTTP檔案上傳行為可以通過這種方式模擬。
從HTML檔案獲取所有有內含的資源:當該選項被選中時,jmeter在發出HTTP請求並獲得響應的HTML檔案內容後,還對該HTML進行Parse 並獲取HTML中包含的所有資源(圖片、flash等),預設不選中,如果使用者只希望獲取頁面中的特定資源,可以在下方的Embedded URLs must match 文字框中填入需要下載的特定資源表示式,這樣,只有能匹配指定正規表示式的URL指向資源會被下載。
用作監視器:此取樣器被當成監視器,在Monitor Results Listener 中可以直接看到基於該取樣器的圖形化統計資訊。預設為不選中。
Save response as MD5 hash? :選中該項,在執行時僅記錄服務端響應資料的MD5值,而不記錄完整的響應資料。在需要進行資料量非常大的測試時,建議選中該項以減少取樣器記錄響應資料的開銷。
在這裡我們新增兩個HTTP請求,分別用於對fnng.cnblogs.com 和 tt-topia.rhcloud.com傳送請求。
設定QPS限制
本次效能測試的需求中提到測試的目的是“瞭解部落格的首頁在負載達到20 QPS時的響應時間”,因此需要控制向部落格首頁傳送請求的負載為20QPS。
一種可行的方法是逐步調整測試計劃中的執行緒計算的數量以及為取樣器(Sampler)新增定時器(Timer),以使HTTP取樣器發出的請求的QPS保持在20個左右。但這種方法耗時耗力,需要經過多次嘗試才能達到;另一方法,完全通過設定定時器來控制QPS,一旦取樣器的響應時間發生改變(網路環境發生改變),就需要重新調整定時器的等待時間。
Jmeter提供了一個非常有用的定時器,稱為Constant Throughput Timer (常數吞吐量定時器),該定時器可以方便地控制給定的取樣器傳送請求的吞吐量。
右鍵點選fnng.cnblogs.com ,彈出選單(新增--->定時器--->Constant Throughput Timer)選擇Constant Throughput Timer
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 基本相同,唯一的區別是,每個活躍執行緒都會在所有活躍執行緒的上一次執行結束後等待合理的時間後再次執行。
如上圖,該元件僅作用於fnng.cnblogs.com ,設定定時器的Target throughput為1200/分鐘(20 QPS),設定Calculate Throughput based on 的值為All active threads 。
當然,Constant Throughput Timer只有線上程組中的執行緒產生足夠多的request 的情況下才有意義,因此,即使設定了Constant Throughput Timer的值,也可能由於執行緒組中的執行緒數量不夠,或是定時器設定不合理等原因導致總體的QPS不能達到預期目標。
新增監聽器(Listener)
指令碼的主要部分設定完成後,需要通過某種方式獲得效能測試中的測試結果,在本例中,我們關心的是請求的響應時間。
Jmeter 中使用監聽器元件收集取樣器記錄的資料並以視覺化的方式來呈現。Jmeter有各種不同的監聽器型別,因為上HTTP請求,我們可在新增聚合報告,更為直觀的檢視測試結果。
新增聚合報告,右鍵點選執行緒組,在彈的選單(新增--->監聽器--->聚合報告)中選擇聚合報告。
執行指令碼
新增完成聚合報告後,我們來執行指令碼,稍後介紹聚合報告的引數。
在運指令碼之前,我們來檢視一下,各個元件的引數設定:
---------------------------------------------------------------
執行緒組:
執行緒數:20
準備時長: 10
迴圈次數:10
---------------------------------------------------------------
HTTP請求:
名稱:fnng.cnblogs.com。
伺服器名稱或IP :fnng.cnblogs.com
埠號:80
Implementation : java
協議: http
方法: GET
路徑:/
---------------------------------------------------------------
常數吞吐量定時器:
Target throughput(in samples per minute):1200.0
Calculate Throughput based on :All active threads
---------------------------------------------------------------
點選工具欄上的執行按鈕,或者點選選單欄“ 執行--->啟動 ” 或者使用快捷鍵ctrl+r 來執行程式。
聚合報告分析
檢視聚合報告的執行結果:
OK! 到此一次完整的效能測試結束,如果你從中有所收穫,推薦一記~!