JMeter场景设置与监控
隨著IT技術(shù)的飛速發(fā)展和企業(yè)互聯(lián)網(wǎng)+業(yè)務規(guī)模不斷擴張,IT架構(gòu)經(jīng)歷了以數(shù)據(jù)計算為核心的C/S架構(gòu)、以聚焦業(yè)務功能及服務化構(gòu)建應用的經(jīng)典互聯(lián)網(wǎng)架構(gòu)和如今整合IT資源和按需使用的云計算架構(gòu)三個階段。
與之同步發(fā)展的壓力測試同樣有三個發(fā)展階段,從防火墻內(nèi)的壓力測試到基于云計算的壓力測試,再到用戶視角的外部壓測,云智慧的壓測寶就是第三代壓力測試產(chǎn)品。而Apache JMeter作為一款大名鼎鼎的開源壓力測試產(chǎn)品,在設計之初就被用來測試C/S結(jié)構(gòu)的軟件,其實現(xiàn)原理就是在防火墻內(nèi)部產(chǎn)生壓力來進行壓測,測試目的也僅是對內(nèi)網(wǎng)的系統(tǒng)硬件資源以及服務、數(shù)據(jù)庫在內(nèi)網(wǎng)并發(fā)負載下的性能表現(xiàn)。
繼《云智慧壓測實戰(zhàn)分享之JMeter工具使用初探》和《云智慧壓測實戰(zhàn)分享之JMeter腳本錄制實例》兩篇內(nèi)容之后,今天云智慧工程師為您帶來的是《云智慧壓測實戰(zhàn)分享之JMeter場景設置與監(jiān)控》,主要包含以下三部分內(nèi)容:場景設置、場景運行和測試監(jiān)聽。
場景設置:
測試場景是測試過程中通常盡量模擬真實系統(tǒng)環(huán)境及用戶操作而設計的場景,場景設計源于用戶的真實操作,設計原則是貼近于用戶實際操作,組合用戶的各種操作到場景中來。JMeter是通過線程組的設置來完成場景設置的,有些復雜場景還需要與邏輯控制器配合。JMeter 線程組實際上是建立一個線程池,JMeter根據(jù)用戶的設置進行線程池的初始化,及在運行時做各種異常處理。下面我們用一幅圖看一下線程組的一些參數(shù):
名稱:根據(jù)實際業(yè)務需求,最好有業(yè)務含義,與場景相符。
注釋:可以隨意設置,可以為空,但是為了以后方便使用,這里最好寫上有意義的備注,和編程里的注釋的目的是一樣。
在取樣器錯誤后要執(zhí)行的的動作:就是線程組內(nèi)某一個請求出錯后的異常處理方式
繼續(xù):某一線程的某一請求出錯后,繼續(xù)運行,就是忽略本次錯誤繼續(xù)執(zhí)行;
Start_NextThread loop:進行下一次線程循環(huán),類似于for循環(huán)中的continue;
停止線程:當某一線程失敗或報錯后停止本線程,類似于LoadRunner中的停止該Vu;
停止測試:某一線程某一請求失敗后,停止所有線程,也就時停止本次測試,但不時立即停止測試,是在本場景中其他線程執(zhí)行迭代結(jié)束后,停止本次測試;
stop Test Now:馬上停止本次測試,不管其他線程是否執(zhí)行結(jié)束;
線程屬性:
線程數(shù):可以理解為并發(fā)用戶數(shù),一個線程對應一個并發(fā)用戶;與LoadRunner中的VU一致,只是LoadRunner中VU可以是線程,也可以是進程(以Http協(xié)議為例);
Ramp-up period(in second):線程啟動開始運行的間隔時間,此處單位為秒,即所有線程多長時間內(nèi)全部啟動,假設線程設置為100(模擬100vu并發(fā)),Ramp-up period設置為10秒,那就是10秒內(nèi)將100個線程啟動,相當于每秒中有10個線程啟動(100/10);如果設置1,就是場景發(fā)起后1秒內(nèi)全部啟動100個線程。
循環(huán)次數(shù):“永遠”就是場景不結(jié)束就所有線程一直發(fā)起壓測,如果想每個線程迭代多少次之后就停止壓測,就可以填入具體的數(shù)字。
Delay Thread creation until needed:選擇該項,線程在Ramp-up period的間隔時間啟動并運行,如100并發(fā)線程,10秒的ramp-up period時間,那么1秒種啟動10個線程并運行采樣器中的請求。如果不勾選,測試計劃啟動所有線程(100個)為new狀態(tài),但不立即運行采樣器(sampler)中的請求,是按照ramp-up period時間來運行的,如100個線程,ramp-up 的時間是10秒,那么每秒會有10個線程有new狀態(tài)轉(zhuǎn)為Running,并執(zhí)行采樣器中的請求。實際測試場景設置時,選不選該項都不會影響測試結(jié)果。二者的區(qū)別是勾選線程是在間隔時間內(nèi)建立啟動并運行,不勾選是先建立所有線程然后按間隔逐步執(zhí)行。
調(diào)度器: 選擇調(diào)度器可以控制場景執(zhí)行時間或指定那個時間段執(zhí)行,如秒殺場景就可以設置為某日某點某分開始執(zhí)行,某日某點某分結(jié)束,具體調(diào)度器中各個參數(shù)如下:
持續(xù)時間:表示腳本持續(xù)運行的時間,以秒為單位,例如腳本模擬用戶持續(xù)不斷登錄1個小時,你可以在文本框中填寫3600。如果在1小時以內(nèi),結(jié)束時間已經(jīng)到達,它將會覆蓋結(jié)束時間,繼續(xù)執(zhí)行。
啟動延遲:表示腳本延遲啟動的時間,在點擊啟動后,如果啟動時間已經(jīng)到達,但是還沒有到啟動延遲的時間,那么,啟動延遲將會覆蓋啟動時間,等到啟動延遲的時間到達后,再運行系統(tǒng)。例如你的測試場景需要再另外一個場景結(jié)束后開始,上一個場景需要10分鐘后結(jié)束,那么你可以再啟動延遲中設置601秒,點擊啟動,就可以在上一個場景結(jié)束后,開始本次測試場景;
啟動時間:表示我們腳本開始啟動的時間,當你不想立即啟動腳本測試,但是啟動腳本的時間不會再電腦旁的時候,你可以設定一個啟動的時間,然后再運行那里點擊啟動,系統(tǒng)將不會立即運行,而是會等到你填寫的時間才開始運行。
結(jié)束時間:與啟動時間對應,表示腳本結(jié)束運行的時間。
注意:如果我們需要用到調(diào)度器來設定持續(xù)時間,如果線程數(shù)不夠多到持續(xù)時間結(jié)束,我們就必須將循環(huán)次數(shù)勾選為永遠,如果線程組里面有其他的循環(huán),我們也需將該循環(huán)次數(shù)勾選為永遠。
在云智慧壓測寶中場景設置就簡單多了,選擇好腳本和測試數(shù)據(jù)后,設置并發(fā)用戶和場景運行時間及壓力發(fā)起方式,平行還是坡度,壓測寶能自動計算每秒啟動多少VU并發(fā),如上圖所示。
場景運行:
JMeter的場景運行方式分為兩種,一種是GUI可視化運行,測試者可以實時看到壓測執(zhí)行過程和壓測結(jié)果,像LoadRunner的Controller一樣;另外一種是非GUI模式運行,即通過命令行像執(zhí)行Shell一樣,在命令窗口運行。
JMeter的場景運行可以在本地運行(即單機運行),也可以是遠程運行,不論是GUI模式還是非GUI模式都支持本地和遠程執(zhí)行。本機運行類似于LoadRunner中將本機做為Controller同時也作為Agent;遠程執(zhí)行類似于LoadRunner中將Agent安裝在別的機器上。
通常在需要大壓力的場景下,一臺機器產(chǎn)生的壓力不能滿足測試需求,就需要多臺壓力機,這時就需要遠程執(zhí)行,如下圖所示:
GUI運行:GUI方式是可視化,直接通過點擊鼠標就可以控制場景的啟動和停止,同時也能隨時查看場景的運行狀況,實時結(jié)果,測試線程數(shù)等。
1.本地運行的所有請求從一臺機器發(fā)出,如下圖,設置了4個并發(fā)線程:
運行的快捷菜單按鈕是:?,本地運行點擊按鈕開始運行,或者通過運行菜單開始運行,如下圖:
場景運行后,我們可以看到下圖中的狀態(tài),時間00:00:01顯示的是當前場景運行的時長,后面感嘆號的圖標是當前場景中是否有線程異常,0為沒有線程異常,0/4中前面代表當前運行的線程數(shù),后面的4代表共運行了4個線程。
在場景運行過程中點擊,可以停止當前場景。
遠程執(zhí)行:
遠程執(zhí)行通常是在一臺機器上的JMeter作為Controller,遠程的多臺機器(slave)作為負載生成器,JMeter控制臺與負載機的通信是通過RMI方式來完成的。在負載機上運行Agent程序,首先啟動jmeter-server,在JMeter控制機(Master)上點擊啟動遠程控制機。
說到這里需要補充說明一下,在啟動遠程機之前需要在JMeter控制機上配置jmeter.properties文件,將遠程負載機IP地址配置到控制臺jmeter.properties文件中;如下圖所示,將遠程負載機的IP地址配置在Remote_hosts=配置項后面,多臺機器用逗號間隔,如果沒有制定端口的話,默認不配置端口。
注意:遠程運行方式如果腳本有依賴的參數(shù)文件或Jar包等文件,需要先把這些文件拷貝到遠程機負載機上,這點不是很人性化,云智慧的壓測寶就不存在這樣的問題,只要把參數(shù)傳上就可以了。
非GUI方式運行:
非GUI方式是沒有JMeter圖形化界面,在命令行窗口通過命令來運行場景,之所以用非GUI方式運行,是因為JMeter可視化界面及監(jiān)聽器動態(tài)展示結(jié)果都比較消耗負載機的資源,在大并發(fā)下GUI方式往往會導致負載機資源緊張,對性能測試結(jié)果造成影響。當然這個影響不是影響被測系統(tǒng)如導致響應時間變大,處理能力減小等,而是影響負載機負載壓力的產(chǎn)生,如非GUI方式可以產(chǎn)生200TPS的負載,而GUI方式只能產(chǎn)生140TPS的負載。當然如果資源比較充足的情況下,GUI方式更能直觀實時了解測試場景運行狀況。至于用哪種方式,個人認為根據(jù)實際情況選擇,資源不寬裕的情況下選擇非GUI方式,資源充足的情況下可以用GUI方式。
非GUI方式運行命令共兩種方式,如下:
1、 jmeter –n –t /home/jeff/script/jmeter_test.jmx –l /home/jeff/result/test.jtl
2、java –jar /apache-jmeter-3.0/bin/ApacheJMeter.jar –n –t /home/jeff/script/jmeter_test.jmx –l /home/jeff/result/test.jtl
jmeter 非GUI方式下的各種命令行參數(shù)這里不在細說,大家可以根據(jù)幫助文檔按圖索驥。
測試監(jiān)聽:
性能測試監(jiān)控的主要任務是獲取運行狀態(tài)、收集測試結(jié)果,測試結(jié)果有事務的響應時間、吞吐率、服務器硬件資源性能(CPU、內(nèi)存、DISK I/O、網(wǎng)絡等)指標及JVM使用情況、數(shù)據(jù)庫性能狀態(tài)等,這些在JMeter中是監(jiān)聽器負責監(jiān)聽的工作。
JMeter監(jiān)聽器比較多,如下圖所示:
長時間執(zhí)行測試計劃使用的監(jiān)聽器主要是Summary Report 或者aggregate Graph (聚合報告),也是今天主要介紹的內(nèi)容。Summary Report以表格的形式顯示采樣結(jié)果,如果不同采樣器(不同請求)使用相同的名字,那么測試結(jié)果在Summary Report中會統(tǒng)計到同一行,所以在給采樣器命名時不要都為空或取相同的名字,根據(jù)實際業(yè)務進行命名。這個類似于LoadRunner腳本中的事物,如果事物名稱一致,測試結(jié)果中不同腳本相同事物將被統(tǒng)計到一起,如下圖所示:
Label:每個 JMeter 的 element (例如 HTTP Request )都有一個 Name 屬性,這里顯示的就是 Name 屬性的值;
#Samples:表示你這次測試中一共發(fā)出了多少個請求,我的測試計劃模擬 10 個用戶,每個用戶迭代 10次,因此這里顯示 100;
Average:平均響應時間 —— 默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也可以以 Transaction 為單位顯示平均響應時間;
Min: 最小響應時間 在測試場景中采樣器一次請求最小的響應時間;
Max: 最大響應時間 在測試場景中采樣器一次請求最大的響應時間;
Error%: 本次測試中出現(xiàn)錯誤的請求的數(shù)量 / 請求的總數(shù);
Throughput: 吞吐量 —— 默認情況下表示每秒完成的請求數(shù)( Request per Second )RPS或者是TPS。
上面字段基本上已經(jīng)能夠說明測試結(jié)果,當然測試者也可以根據(jù)自己需求添加一些需要監(jiān)控的參數(shù),點擊config按鈕,彈出下圖中配置頁面:
提示:保存的監(jiān)聽參數(shù)越多,對本機和負載機的IO產(chǎn)生的壓力越大,所以并不是參數(shù)越多越好,夠用就可以了。
Aggregate Graph(聚合報告)
在Aggregate Report中,會顯示一行數(shù)據(jù),共有10個字段,Label、#Samples、Average、Min、Max、Error%的含義和Summary Report一樣,有差異的字段如下:
Median:中位數(shù),也就是 50% 用戶的響應時間;
90% Line:90% 用戶的響應時間;
Throughput:吞吐量——默認情況下表示每秒完成的請求數(shù)(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的TPS[Transaction per Second];
KB/Sec:每秒從服務器端接收到的數(shù)據(jù)量,相當于LoadRunner中的Throughput/Sec;
通過上面的介紹,可以看到Summary Report和Aggregate Graph(聚合報告)類似,只是 聚合報告更詳細一點。說了這么多是不是覺得jmeter的監(jiān)聽器很復雜,所以還是壓測寶更方便,不需要設置什么監(jiān)聽器,測試結(jié)果直接實時展現(xiàn),如下圖所示:
好了,今天就分享到這里,JMeter 還有很多內(nèi)容,后面有機會再一一介紹,謝謝大家!
轉(zhuǎn)載地址:http://news.chinabyte.com/362/14016862.shtml
總結(jié)
以上是生活随笔為你收集整理的JMeter场景设置与监控的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS 调用系统照相机和相册
- 下一篇: DS3231时钟模块使用,IIC协议实践