1. 程式人生 > >【jmeter】一個簡單的性能測試

【jmeter】一個簡單的性能測試

虛擬機 次數 長連接 目的 存在 一秒 through pos 服務

1.測試目標網站http://www.jianshu.com/

2.測試目的是該網站15QPS負載下的響應時間

執行測試之前,要先建立一個測試計劃,而jmeter每次打開後,都會生成一個空的測試計劃

添加線程組

一個性能測試是基於測試計劃完成,而一個測試計劃又是基於線程組完成的。所以一個測試計劃必定有一個線程組,在jmeter中,添加線程組非常簡單。鼠標右鍵->添加->Threads->線程組

技術分享

下面說說線程組的構成

線程數:vuer的數量,也就是虛擬機用戶數。一個線程數代表一個虛擬用戶,需要多少虛擬用戶就設置多少線程數。

Ramp-Up Period(in seconds)

:啟動時長,所有虛擬用戶的總啟動時間。假如啟動時長是5s,線程數20,也就是每一秒啟動4個線程。

循環次數:顧名思義,也就是每個線程發起請求的循環次數。假如10線程,循環次數5,也就是每個線程發起5次請求,總請求=線程數*循環次數 10*5=50。如果勾選永遠,線程就會一直不停的發起請求,直到手動停止腳本為止。

本例中,要求測試達到15QPS的響應時間,如果線程數太低,則達不到QPS需要的請求,合理的線程數是達到測試目標的重要依據。合理的循環次數也是非常重要的(壓力測試中,1萬次請求,就是根據循環次數和線程數來決定的)。另外,調用器可以控制測試開始執行的時間。

添加HTTP請求

添加http請求也非常簡單,在添加線程組之後,鼠標右鍵線程組->添加->Sampler->HTTP請求

技術分享

Sample(取樣器):主要對服務器發出請求;記錄響應數據,響應時間。(通常與Listen搭配使用)

技術分享

下面說一下HTTP的構成

名稱:每一個sample都有一個名稱屬性,建議取一個與測試相關的名字。

註釋:跟編程裏面的註釋用法一致,對測試沒有任何作用,僅用戶標識的解釋。

服務器名稱或IP:HTTP請求發送的目標服務器名稱或IP地址。

端口號:目標服務器或者IP的端口,默認80。

協議:向目標服務器發起請求時的協議,通常是HTTP和HTTPS,默認是HTTP。

方法:向目標服務器發起請求時的方法,常用有GET、POST、HEAD。

Content encoding:內容的編碼方式,默認值為iso8859。

路徑:目標URL路徑(不包括服務器地址和端口)

自動重定向:選中該選項時,當發送HTTP請求後得到的響應是302/301時,JMeter 自動重定向到新的頁面,默認勾選跟隨重定向。

Use keep Alive: 當該選項被選中時,jmeter 和目標服務器之間使用 Keep-Alive方式進行HTTP通信,默認選中。keep-alive,保持長連接,目的減少連接的開銷

同請求一起發送參數: 在請求中發送URL參數,對於帶參數的URL ,jmeter提供了一個簡單的對參數化的方法。用戶可以將URL中所有參數添加到本表,參數以鍵值對的形式存在。

同請求一起發送文件:在請求中發送文件,HTTP需要文件上傳時可以通過這種方式模擬。

用作監視器:此取樣器被當成監視器,在Monitor Results Listener 中可以直接看到基於該取樣器的圖形化統計信息。默認為不選中。

設置QPS限制

本次性能測試的需求中提到測試的目的是“了解簡書的首頁在負載達到15 QPS時的響應時間”,因此需要控制向博客首頁發送請求的負載為15QPS。

方式一:逐步調整測試計劃中線程數,並通過添加定時器計算響應時間,使HTTP發出的請求的數量達到15QPS。但是這種方法有個很致命的缺陷,一旦網絡響應時間改變,就需要重新計算QPS的數量。

方式二:Jmeter有一個非常有用的定時器,叫做Constant Throughput Timer (常數吞吐量定時器),該定時器可以根據時長控制取樣器吞吐量。右鍵點擊線程組->添加->定時器->Constant Throughput Timer

技術分享

Target throughput(in samples per minute):目標吞吐量。這裏是每分鐘發送的請求數(in sample per minute),15QPS對於值也就是15*60=900

Constant Throughput Timer 的主要屬性介紹:

名稱:定時器的名稱

Target throughput(in samples per minute):目標吞吐量。註意這裏是每分鐘發送的請求數,因此,對應測試需求中所要求的20 QPS ,這裏的值應該是1200 。

技術分享

Calculate Throughput based on:

This thread only:每個線程的吞吐量,總吞吐量=target Throughput*線程數。

All active threads:所有線程的活動,總target Throughput分配到每個線程上。

All active threads in current thread group :當前線程組中的所有活躍的線程。將所有target Throughput分配到每個活躍的線程上。

All active threads (shared ):所有活動線程(共享),與All active threads in current thread group效果相同,每個活躍線程都會在所有活躍線程上一次運行結束後等待合理的時間後再次運行。

All cative threads in current thread group (shared ):當前線程組中的所有活躍的線程,與All active threads in current thread group效果相同,唯一區別,每個活躍線程都會在所有活躍線程上一次運行結束後,等待合理的時間後再次運行。 

技術分享   

技術分享

Label:每一個sample都有一個name屬性,可以取一個有意義的名字

Samples:此次測試計劃中的所有請求。

Average:平均響應時間,默認是單個請求的平均響應時間。

Median:中位數響應時間,50%的用戶響應時間。

90%Line:90%的用戶響應時間。

Min:最小響應時間。

Max:最大響應時間。

Error%:本次測試出現錯誤的比例。

Throughput:吞吐量,默認從每秒處理請求數。默認單位是/sec,跟loadrunner的每秒點擊次數類似。

KB/sec:從服務器接受的數據量,跟loadrunner的Throughput/sec一致。

運行腳本

jmeter運行腳本的方式,非常簡單。點擊綠色三角形的啟動按鈕,就可以了。打開調度器的記得關閉,否則jmeter只會執行一次循環。

測試數據

技術分享

run啟動

技術分享

OK,到此為止,一個簡單的性能測試就完成了,希望大家學到一些東西。

PS: 檸檬班7月25日晚上8點,免費公開課又要來啦!!!

課題:安全測試之腳本攻擊

加群629711745,由管理員帶你進課堂

【jmeter】一個簡單的性能測試