在進(jìn)行性能測(cè)試執(zhí)行之前锤灿,需要進(jìn)行場(chǎng)景的設(shè)計(jì):
以什么方式啟動(dòng),如何持續(xù)進(jìn)行昔期,直至測(cè)試結(jié)束
三部曲:?jiǎn)?dòng)---持續(xù)進(jìn)行---結(jié)束
- 啟動(dòng)
虛擬用戶(VR)如何進(jìn)入測(cè)試現(xiàn)場(chǎng)
1)同時(shí)加載所有VR還是分階段逐漸加載驹尼?
2)一次加載100個(gè)VR 還是 每2秒加載5個(gè)VR,40秒完成100個(gè)VR的加載尸执? - 持續(xù)時(shí)間
在到達(dá)最大負(fù)載后,繼續(xù)運(yùn)行一段時(shí)間還是進(jìn)行多次循環(huán) - 結(jié)束
和啟動(dòng)相對(duì)應(yīng)缓醋,某個(gè)時(shí)刻全部停止 或者分階段逐漸減少用戶如失,如2秒鐘停止10個(gè)用戶的操作,20秒后結(jié)束所有用戶的操作
PS:一般情況下送粱,建議限制Jmeter的的線程數(shù)在300及以內(nèi)褪贵,這樣能更好的發(fā)揮出jmeter的性能
本文模擬場(chǎng)景:
請(qǐng)求頁(yè)面:百度新聞頁(yè)、知道頁(yè)抗俄、音樂(lè)頁(yè)訪問(wèn)
100個(gè)線程竭鞍,循環(huán)20次,同時(shí)加載完結(jié)束后全部停止
指標(biāo):響應(yīng)時(shí)間以及錯(cuò)誤率
測(cè)試步驟:
測(cè)試計(jì)劃---線程組--HTTP請(qǐng)求---監(jiān)聽(tīng)器---運(yùn)行腳本---查看報(bào)告
PS:默認(rèn)情況下橄镜,JMeter運(yùn)行需要占用1 GB的內(nèi)存偎快,這可能還不夠,取決于你的測(cè)試計(jì)劃和需要運(yùn)行的線程數(shù)
一洽胶、創(chuàng)建測(cè)試計(jì)劃(Test plan building)
一個(gè)測(cè)試計(jì)劃描述了一系列Jmeter運(yùn)行時(shí)需要執(zhí)行的步驟晒夹,可以包含一個(gè)或者多個(gè)線程組,邏輯控制器姊氓,取樣發(fā)生控制丐怯,監(jiān)聽(tīng)器,定時(shí)器翔横,斷言和配置元件读跷。
啟動(dòng)JMeter,會(huì)出現(xiàn)一個(gè)空的測(cè)試計(jì)劃禾唁,此次練習(xí)通過(guò)手寫(xiě)腳本來(lái)實(shí)現(xiàn)
(不熟悉操作的效览,也可以通過(guò)模板的形式創(chuàng)建,在菜單欄文件--Templates荡短,下拉列表中選擇Recording丐枉,點(diǎn)擊Create,一個(gè)完整的Test Plan就生成了掘托,當(dāng)然我們可以刪除不需要的內(nèi)容)
二瘦锹、添加線程組
作用:模擬用戶個(gè)數(shù)、發(fā)送請(qǐng)求的頻率及次數(shù)
PS:設(shè)置合理的線程數(shù)對(duì)能否達(dá)到測(cè)試目標(biāo)有著決定性的影響,另外弯院,設(shè)置合理的循環(huán)次數(shù)也很重要
- 線程數(shù):虛擬用戶數(shù)
- Ramp-Up period :設(shè)置虛擬用戶數(shù)全部啟動(dòng)的時(shí)長(zhǎng)(多少秒內(nèi)完成所有線程的創(chuàng)建)
如圖線程數(shù)為100辱士,準(zhǔn)備時(shí)長(zhǎng)為1秒,表示需要1秒鐘啟動(dòng)100個(gè)線程听绳,也就是平均每秒啟動(dòng)100個(gè)線程 - 循環(huán)次數(shù):如果勾選了永遠(yuǎn)颂碘,那么它將永遠(yuǎn)發(fā)送下去,直到停止腳本辫红,循環(huán)數(shù)=20凭涂,則運(yùn)行100個(gè)線程*20次祝辣,即2000次
三贴妻、添加HTTP請(qǐng)求
此處添加3個(gè)HTTP請(qǐng)求
四、添加監(jiān)聽(tīng)器
1蝙斜、添加響應(yīng)斷言:設(shè)置響應(yīng)碼為200
2名惩、查看結(jié)果樹(shù),驗(yàn)證請(qǐng)求
調(diào)試時(shí)線程數(shù)和循環(huán)次數(shù)設(shè)為1就可以了孕荠,記得調(diào)試好之后再改回去
3娩鹉、禁用查看結(jié)果樹(shù),命令行執(zhí)行腳本
我們?cè)趩?dòng)Jmeter時(shí)就會(huì)看到命令行的提示信息稚伍,進(jìn)行負(fù)載測(cè)試時(shí)請(qǐng)不要使用GUI模式弯予,也就是用命令行模式運(yùn)行 JMeter 測(cè)試腳本,這樣可以大大縮減所需要的系統(tǒng)資源
備注:GUI 即圖形用戶界面模式个曙,只應(yīng)用于創(chuàng)建測(cè)試腳本锈嫩、調(diào)試腳本
圖中也給出了命令格式:jmeter -n -t [jmx file] -l [result file] -e -o [Path to output folder],JMeter 默認(rèn)去當(dāng)前目錄尋找腳本文件垦搬,并把日志記錄在當(dāng)前目錄呼寸,當(dāng)然也可以使用絕對(duì)路徑來(lái)執(zhí)行
- jmx file:測(cè)試計(jì)劃的文件名稱
- result file:輸出文件路徑,可以是結(jié)果日志名稱
- Path to output folder:要保存的report文件路徑
參數(shù)說(shuō)明:
- -n:非GUI模式執(zhí)行JMeter
- -t:執(zhí)行測(cè)試文件所在的位置
- -l:指定生成測(cè)試結(jié)果的保存文件猴贰,jtl文件格式
- -e:測(cè)試結(jié)束后对雪,生成測(cè)試報(bào)告
- -o:指定測(cè)試報(bào)告的存放位置
(1)直接生成HTML報(bào)告
PS:輸出文件(-l后的文件)必須是不存在的,report文件夾為空文件夾或者不存在(-o后面的)米绕,不然無(wú)法生存報(bào)告
啟動(dòng)CMD窗口瑟捣,輸入以下命令:
jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l C:\Users\zhangXXX\Desktop\html.csv -e -o C:\Users\zhangXXX\Desktop\baidu-reports
(2)使用之前的測(cè)試結(jié)果,生成測(cè)試報(bào)告
啟動(dòng)CMD窗口栅干,先生成測(cè)試結(jié)果蝶柿,再生成報(bào)告,輸入以下命令:
- jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l 201804020001.jtl
- jmeter -g 201804020001.jtl -o C:\Users\zhangXXX\Desktop\baidu-reports
PS:-g 指定已存在的測(cè)試結(jié)果文件
以上兩種方法非驮,其實(shí)最終都依賴生成的測(cè)試報(bào)告交汤。雙擊報(bào)告文件夾中的index.html就可以查看報(bào)告
報(bào)告詳解
Dashboard:
Test and Report informations:指的是測(cè)試和報(bào)告信息
- File:測(cè)試結(jié)果的保存文件名稱
- Start Time:測(cè)試開(kāi)始時(shí)間
- End Time:測(cè)試結(jié)束時(shí)間
- Filter for display展示過(guò)濾器
APDEX(Application Performance Index):應(yīng)用程序性能滿意度的標(biāo)準(zhǔn),范圍在0-1之間,1表示達(dá)到所有用戶均滿意芙扎,越接近1滿意度越高
Requests Summary:請(qǐng)求的通過(guò)率(OK)與失敗率(KO)星岗,百分比顯示
Statistics:數(shù)據(jù)分析,基本將Summary Report和Aggrerate Report的結(jié)果合并
Errors:錯(cuò)誤情況戒洼,依據(jù)不同的錯(cuò)誤類型俏橘,將所有錯(cuò)誤結(jié)果展示
Charts:用圖表的形式展示測(cè)試數(shù)據(jù),讓測(cè)試報(bào)告更加直觀**
主要有如下特點(diǎn):
(1)將測(cè)試過(guò)程中經(jīng)常使用的數(shù)據(jù)圈浇,用圖表的形式展示寥掐,讓測(cè)試結(jié)果更加直觀
(2)每個(gè)圖表數(shù)據(jù),有兩種展示形式
(3)支持請(qǐng)求樣例過(guò)濾顯示
(4)支持導(dǎo)出PNG圖片格式
Over Time Charts:
- Response Times Over Time:每秒鐘響應(yīng)時(shí)間磷蜀,X軸表示的是系統(tǒng)運(yùn)行的時(shí)刻召耘,Y軸表示的是響應(yīng)時(shí)間,F(xiàn)(X,Y)表示系統(tǒng)隨著時(shí)間的推移褐隆,系統(tǒng)的響應(yīng)時(shí)間的變化污它,可以看出響應(yīng)時(shí)間穩(wěn)定性
- Bytes Throughput Over Time:字節(jié)接收與發(fā)送的數(shù)量,每秒傳輸字節(jié)吞吐量庶弃,表明Jmeter在測(cè)試時(shí)衫贬,隨著時(shí)間推移發(fā)送和接收的字節(jié)數(shù)
- Latencies Over Time:延遲時(shí)間
Throughput Charts:
- Hits Per Second: 每秒點(diǎn)擊率
- Codes Per Second:每秒狀態(tài)碼數(shù)量
- Transactions Per Second:每秒事務(wù)量
- Response Time Vs Request:響應(yīng)時(shí)間點(diǎn)請(qǐng)求的成功與失敗數(shù)
- Latency Vs Request:延遲時(shí)間點(diǎn)請(qǐng)求的成功與失敗數(shù)
Response Times Charts:
- Response Time Percentiles:響應(yīng)時(shí)間百分比
- Active Threads Over Time:激活線程數(shù)
- Time Vs Threads:響應(yīng)時(shí)間用戶數(shù), X軸表示的是活動(dòng)線程數(shù)歇攻,也就是并發(fā)訪問(wèn)的用戶數(shù)固惯,Y軸表示的是響應(yīng)時(shí)間,F(xiàn)(X,Y)表示在某種并發(fā)量的情況下缴守,系統(tǒng)的響應(yīng)時(shí)間是多少
- Response Time Distribution:響應(yīng)時(shí)間分布
4葬毫、添加所需監(jiān)聽(tīng)器,導(dǎo)入日志文件即可查看
在性能測(cè)試過(guò)程中斧散,我們往往需要將測(cè)試結(jié)果保存在一個(gè)文件當(dāng)中供常,也可以為日后的性能測(cè)試報(bào)告提供更多的素材
在Jmeter中,結(jié)果都存放在 .jtl 文件中鸡捐,格式有很多種栈暇,可以根據(jù)需要進(jìn)行更愛(ài),選擇某個(gè)監(jiān)聽(tīng)器箍镜,在configure頁(yè)面進(jìn)行相應(yīng)配置源祈,讓我們來(lái)查看下保存后的文件有哪些內(nèi)容:
- timeStamp:請(qǐng)求發(fā)出的絕對(duì)時(shí)間
- elapsed:響應(yīng)時(shí)間
- label:HTTP請(qǐng)求名稱
- responseCode:請(qǐng)求返回碼
- responseMessage:請(qǐng)求返回消息
- threadName:請(qǐng)求所屬的線程名稱
- dataType:數(shù)據(jù)類型
- success:是否成功
- failureMessage:失敗信息
- bytes:字節(jié)
- sentBytes:發(fā)送字節(jié)數(shù)
- grpThreads:
- allThreads:
- Latency:延遲
- IdleTime:思考時(shí)間
- Connect:連接
接下來(lái)添加一個(gè)聚合報(bào)告,然后導(dǎo)入日志文件色迂,查看結(jié)果香缺,還可以添加其他的監(jiān)聽(tīng)器,操作方法一樣
PS:如果測(cè)試計(jì)劃中增加了監(jiān)聽(tīng)器(生成概要結(jié)果)歇僧,在執(zhí)行命令時(shí)就可以看到每個(gè)線程的執(zhí)行情況
PS:設(shè)置好線程數(shù)图张、循環(huán)次數(shù)锋拖、集合點(diǎn)、事務(wù)祸轮、斷言兽埃、關(guān)聯(lián)等等后即可執(zhí)行壓力測(cè)試
最后,大并發(fā)下還是需要進(jìn)行分布式性能測(cè)試
原理和LR的agent差不多适袜,因?yàn)閖meter由Java開(kāi)發(fā)柄错,耗內(nèi)存、cpu苦酱,所以需要采用分布式
步驟:
1售貌、關(guān)閉防火墻
2、在所要運(yùn)行jmeter并作為負(fù)載生成器的機(jī)器上安裝jmeter(確保在所有系統(tǒng)中使用了相同版本號(hào)的Jmeter和jdk)
PS:目標(biāo)服務(wù)器需要在相同網(wǎng)段疫萤,確保Jmeter可以訪問(wèn)目標(biāo)服務(wù)器
3颂跨、確定其中一臺(tái)機(jī)器作為主controller,其他的機(jī)器作為agent给僵,然后運(yùn)行所有agent機(jī)器上的jmeter-server文件
4毫捣、在controller機(jī)器的jmeter中bin目錄下详拙,找到j(luò)meter.properties文件帝际,添加節(jié)點(diǎn)IP,修改localhost為壓力機(jī)IP
5饶辙、啟動(dòng)conttoller機(jī)子上的jmeter應(yīng)用蹲诀,選擇菜單【運(yùn)行】---遠(yuǎn)程啟動(dòng)來(lái)分別啟動(dòng)agent,也可以直接選擇【遠(yuǎn)程全部啟動(dòng)】來(lái)將所有個(gè)agent啟動(dòng)
在性能測(cè)試過(guò)程中弃揽,我們通常需要將測(cè)試結(jié)果保存在一個(gè)文件當(dāng)中脯爪,既可以保存測(cè)試結(jié)果,也可以為日后的性能測(cè)試報(bào)告提供更多的素材
Jmeter中矿微,結(jié)果都存放在.jtl文件痕慢,一般以csv文件格式記錄,只需要選擇某個(gè)監(jiān)聽(tīng)器涌矢,點(diǎn)擊頁(yè)面的configure按鈕掖举,建議勾選如下項(xiàng):Save Field Name,Save Assertion Failure Message
Jmeter的應(yīng)用場(chǎng)景:性能測(cè)試(接口層)
技術(shù)點(diǎn):HTTP相關(guān)設(shè)置+參數(shù)化+斷言+關(guān)聯(lián)+簡(jiǎn)單控制器+查看結(jié)果樹(shù)
關(guān)聯(lián):通過(guò)Json控件或正則表達(dá)式獲取
(1)線程組建議替換為jp@gc - Stepping Thread Group娜庇,功能比線程組多很多
- this group will start N threads:相當(dāng)于LR中的并發(fā)數(shù)
- First塔次,wait for N seconds:?jiǎn)?dòng)第一個(gè)線程之前,需要等待N秒
- Then start N threads:設(shè)置最開(kāi)始啟動(dòng)N個(gè)線程
- Next,add N1 threads every N2 seconds,using ramp-up N3 seconds:在N3秒內(nèi)啟動(dòng)N1個(gè)線程名秀,啟動(dòng)的策略為每隔N2秒啟動(dòng)一個(gè)
- Then hold load for N seconds:并發(fā)數(shù)全部達(dá)到后再運(yùn)行多久
- Finally,stop N1 threads every N2 seconds:每隔N2秒停止N1個(gè)
(2)可以加事務(wù)控制器
(3)查看結(jié)果樹(shù)替換為聚合報(bào)告或類似的報(bào)告励负,如果還是想看查看結(jié)果樹(shù)記得勾選僅日志錯(cuò)誤(查看結(jié)果樹(shù)打印的日志比較多,會(huì)影響性能)
(4)造數(shù)據(jù)
總結(jié):
一個(gè)子系統(tǒng)建議放在同一個(gè) “測(cè)試計(jì)劃”中匕得,流程測(cè)試可以通過(guò)“線程組”來(lái)區(qū)分继榆,這樣也便于設(shè)定不同的測(cè)試數(shù)據(jù)個(gè)數(shù)。
比較獨(dú)立的接口,可以統(tǒng)一放在一個(gè)線程組內(nèi)略吨,順序完成測(cè)試攒发。
流程性接口的測(cè)試:如果要測(cè)試的接口可以組成一個(gè)流程,只需要順序添加多個(gè)“HTTP 請(qǐng)求”的Sampler晋南,各請(qǐng)求之間可以提取需要在上下文傳遞的數(shù)據(jù)作為參數(shù)惠猿,以保證流程中數(shù)據(jù)的一致性