性能測試
應(yīng)用:負(fù)載測試,壓力測試,并發(fā)測試,(非性能測試:但是jmeter能做接口測試)
負(fù)載測試:
在一定的軟件却汉,硬件和網(wǎng)絡(luò)環(huán)境下,通過運(yùn)行一種或者多種業(yè)務(wù)在不同虛擬機(jī)用戶數(shù)量情況下荷并,測試服務(wù)器的性能指標(biāo)是否在用戶的要求范圍內(nèi)合砂,用于確定系統(tǒng)所能承載的最大用戶數(shù),最大有效用戶數(shù)源织,以及不同用戶數(shù)下的系統(tǒng)響應(yīng)時(shí)間及服務(wù)器的資源利用率(其中最大用戶數(shù)是測試系統(tǒng)是否出error時(shí)的用戶數(shù)翩伪,而最大有效用戶數(shù)視公司規(guī)定在某服務(wù)器利用率下用戶數(shù)(包括cpu利用率,磁盤利用率谈息,網(wǎng)絡(luò)資源利用率缘屹,內(nèi)存利用率))
壓力測試:
在一定的軟件,硬件和網(wǎng)絡(luò)條件下侠仇,通過模擬大量的虛擬用戶向服務(wù)器產(chǎn)生負(fù)載轻姿,是服務(wù)器資源處于極限狀態(tài)下長時(shí)間持續(xù)運(yùn)行,以測試服務(wù)器在高負(fù)載情況下能否穩(wěn)定工作。(即測試在某有效用戶數(shù)下長時(shí)間運(yùn)行互亮,系統(tǒng)是否不出error)
并發(fā)測試:
主要指當(dāng)測試多用戶并發(fā)訪問同一個(gè)應(yīng)用犁享、模塊、數(shù)據(jù)時(shí)是否產(chǎn)生隱藏的并發(fā)問題胳挎,如內(nèi)存泄漏饼疙、線程鎖溺森、資源爭用問題慕爬。
三者的區(qū)別:
負(fù)載測試測試系統(tǒng)最大登錄用戶數(shù),壓力測試系統(tǒng)穩(wěn)定性屏积,并發(fā)測試用戶同時(shí)訪問某模塊時(shí)系統(tǒng)的穩(wěn)定性
接口測試:
使用POST或者GET的方式查看返回參數(shù)是否正確(可用jmeter医窿,loadrunner,postman等等)
性能測試工具:Jmeter炊林,LoadRunner(不講)
jmeter和loadrunner區(qū)別:
jmeter:開源免費(fèi)姥卢,界面操作差,網(wǎng)上學(xué)習(xí)成本高渣聚,安裝簡易独榴,安裝包小(幾十m)
loadrunner:收費(fèi)(十多萬)奕枝,操作性好棺榔,學(xué)習(xí)成本低,安裝復(fù)雜隘道,安裝包大(3-4G)
jmetet環(huán)境搭建:
jmeter:jmeter4.0版本症歇,傻瓜式安裝,點(diǎn)擊jmeter-4.0\bin目錄下jmeter.bat或者ApacheJMeter.jar
jdk:jmeter4.0要求jdk1.8或者版本8以上
jmeter錄制腳本工具:badboy谭梗,jmeter代理錄制
- badboy:傻瓜式安裝
jmeter代理錄制
jmeter使用環(huán)境部署:WebTours和phpwind
-
WebTours環(huán)境搭建:
strawberry-perl:傻瓜式安裝
WebTours:解壓直接放在某目錄下忘晤,打開WebTours主目錄下StartServer開啟服務(wù)
phpwind環(huán)境搭建:直接將文件夾置于\xampp\htdocs下,上網(wǎng)安裝服務(wù)
jmeter使用操作:
錄腳本:
打開badboy開始錄制腳本激捏,如上圖所示紅圓點(diǎn)為正在錄制狀態(tài)(其中在紅圓點(diǎn)附近一欄有暫停播放快進(jìn)等功能鍵)设塔,點(diǎn)擊右側(cè)綠色箭頭鍵可進(jìn)入某網(wǎng)站。當(dāng)我們開始錄制腳本時(shí)远舅,紅圓點(diǎn)為按下狀態(tài)顯示正在錄制壹置,我們就可以在網(wǎng)頁欄輸入你想要測試的網(wǎng)站,點(diǎn)擊綠色箭頭鍵就可以訪問網(wǎng)站表谊,這時(shí)候你就可以對網(wǎng)站進(jìn)行操作钞护,你的操作將會被錄制成腳本。操作完成后爆办,左邊script欄會出現(xiàn)你的操作且被轉(zhuǎn)換為http請求难咕。錄制好腳本后就可以導(dǎo)出至jmx文件類型供jmeter使用。
調(diào)試腳本:
好的,你現(xiàn)在已經(jīng)錄制好腳本了余佃,可以開始用所錄制好的腳本進(jìn)行性能測試了暮刃。但是在此之前,你還需要先學(xué)習(xí)jmeter調(diào)試腳本的基本知識爆土。
現(xiàn)在椭懊,你首先要打開jmeter,導(dǎo)入你所錄制的腳本
現(xiàn)在腳本有了步势,我們就先學(xué)習(xí)jmeter的線程組氧猬,循環(huán)控制器,監(jiān)聽器坏瘩,定時(shí)器盅抚,參數(shù)化,斷言倔矾,http默認(rèn)值參數(shù)妄均,事務(wù)控制器吧
線程組:
線程數(shù):即虛擬用戶數(shù),模擬N個(gè)虛擬用戶
ramp-up period:啟動(dòng)時(shí)間哪自,即完全啟動(dòng)所有線程數(shù)所用總時(shí)間丰包,若是線程數(shù)很大,啟動(dòng)時(shí)間很多會造成服務(wù)器壓力過大
循環(huán)次數(shù):指每一線程完整運(yùn)行一個(gè)腳本的次數(shù)壤巷,(PS:運(yùn)行一整個(gè)線程組的總次數(shù)是線程數(shù) * 線程組循環(huán)次數(shù)* 腳本循環(huán)次數(shù))邑彪。可以點(diǎn)擊永遠(yuǎn)隙笆,一般配合調(diào)度器使用
調(diào)度器:
持續(xù)時(shí)間:指運(yùn)行線程組總時(shí)間
啟動(dòng)延遲:經(jīng)過多少秒才運(yùn)行線程組
循環(huán)控制器
我們可以通過添加循環(huán)控制器來控制jmeter循環(huán)腳本的次數(shù)锌蓄,但是用badboy錄制的腳本有問題,第一次使用腳本的時(shí)候線程組的循環(huán)次數(shù)和請求循環(huán)次數(shù)不統(tǒng)一撑柔,需要先把步驟設(shè)置為簡單控制器再設(shè)置為循環(huán)控制器瘸爽。而循環(huán)時(shí)候取值為。
監(jiān)聽器
主要是記錄腳本運(yùn)行時(shí)候各項(xiàng)情況铅忿。
查看結(jié)果樹:記錄每一步運(yùn)行情況(取樣器結(jié)果剪决,請求,響應(yīng)參數(shù))
用表格看結(jié)果:以表格的形式記錄每一步運(yùn)行的情況
斷言結(jié)果:記錄每次斷言后的結(jié)果
聚合報(bào)告:以表格統(tǒng)計(jì)每一個(gè)請求各項(xiàng)數(shù)據(jù)
定時(shí)器:
我們主要用2個(gè)定時(shí)器檀训,一是思考時(shí)間(固定定時(shí)器)柑潦,二是集合點(diǎn)(Synchronizing Timer)
思考時(shí)間:如圖,就是在發(fā)帖該步驟進(jìn)行前設(shè)置一個(gè)等待(等待時(shí)間以毫秒計(jì)算)峻凫,主要用于模擬用戶的實(shí)際使用場景
集合點(diǎn):因?yàn)槊總€(gè)線程開啟時(shí)間不同渗鬼,到達(dá)每個(gè)請求的時(shí)候均不同。故讓每個(gè)線程到了某一步的時(shí)候開始等待荧琼,等其他線程再一起啟動(dòng)譬胎。number of simulated users to group by:等待的線程數(shù)差牛;timeout in milliseconds:等待的毫秒數(shù),如果超過時(shí)間即時(shí)等不到足夠的線程組腳本也會走下去堰乔。該項(xiàng)主要用于并發(fā)測試
參數(shù)化:
目前我們所學(xué)到的參數(shù)化主要有兩種偏化,一是使用csv數(shù)據(jù)文件設(shè)置,二是使用正則表達(dá)式提取器镐侯,三是使用函數(shù)助手侦讨。
-
csv數(shù)據(jù)文件設(shè)置(右鍵添加——配置元件——csv數(shù)據(jù)文件設(shè)置)
-
如圖:
文件名:可用絕對路徑,也可以用相對路徑
文件編碼:utf-8
變量名稱:不管
忽略首行:忽略CSV文件的第一行苟翻,僅當(dāng)變量名稱不為空時(shí)才使用韵卤,如果變量名稱為空,則第一行必須包含標(biāo)題袜瞬。
分隔符:怜俐,
是否允許帶引號:true
遇到文件結(jié)束符再次循環(huán):Flase
遇到文件結(jié)束符停止線程:flase
線程共享模式:該csv在打開幾次(或說使用幾次)
一般我們按這樣設(shè)置就可以循環(huán)使用csv數(shù)據(jù)身堡,在舒勇csv數(shù)據(jù)的時(shí)候邓尤,將在請求參數(shù)改成${你的參數(shù)}
若想了解更深請看官方文檔
-
-
正則表達(dá)式提取器(右鍵添加——后置處理器——正則表達(dá)提取器)
-
有時(shí)候我們在請求參數(shù)的時(shí)候,他需要一些在前面步驟的響應(yīng)參數(shù)來作為該步驟的請求參數(shù)贴谎,這個(gè)時(shí)候我們就可以從結(jié)果樹判斷該響應(yīng)參數(shù)的位置汞扎,在該步驟下設(shè)置一個(gè)正則表達(dá)式。
引用名稱:就是你提取的響應(yīng)參數(shù)設(shè)置參數(shù)化擅这,使得他能在其他步驟直接調(diào)用
正則表達(dá)式:我在響應(yīng)參數(shù)里面要找到AAABBBCCC澈魄,我要用BBB,那么我就用(.*?)代替BBB仲翎,以AAA和CCC作為路標(biāo)找BBB
模板:1痹扇,假如我有多個(gè)(.*?),我要用第一個(gè)溯香,就用1選擇第一個(gè)括號
匹配數(shù)字:如果我在相應(yīng)數(shù)據(jù)里面找2個(gè)AAA(.*?)CCC鲫构,而我要的是第二個(gè),就可以填2
-
-
函數(shù)助手(抬頭選項(xiàng)——函數(shù)助手對話框)
- 目前我們使用函數(shù)助手對話框可實(shí)現(xiàn)一些簡單功能玫坛,如計(jì)數(shù)结笨,計(jì)算時(shí)間。詳細(xì)請看官方文檔湿镀。
斷言(右鍵斷言——響應(yīng)斷言):
- 斷言主要是比較該http請求的響應(yīng)參數(shù)與預(yù)期響應(yīng)參數(shù)作比較炕吸,但是要記得預(yù)期寫響相應(yīng)參數(shù)的時(shí)候要參考響應(yīng)參數(shù)
Http默認(rèn)值(右鍵添加——配置元件):
該項(xiàng)主要可以設(shè)置默認(rèn)的IP地址以及默認(rèn)的編碼UTF-8
事務(wù)控制器(右鍵添加——邏輯控制器)
該控制器主要用于打包某幾項(xiàng)http請求為一個(gè)件里面,generate parent sample可以為設(shè)置被打爆的http請求要不要獨(dú)立顯示勉痴,該項(xiàng)在特殊場合有很大的作用赫模。
現(xiàn)在我們有了腳本也學(xué)習(xí)了jmeter的基礎(chǔ)知識(線程組,循環(huán)控制器蒸矛,監(jiān)聽器瀑罗,定時(shí)器扫外,參數(shù)化,斷言廓脆,http默認(rèn)值參數(shù)筛谚,事務(wù)控制器),現(xiàn)在我們就可以用腳本和所學(xué)到的基礎(chǔ)知識調(diào)試腳本停忿,進(jìn)行性能測試了驾讲。
性能測試實(shí)操
負(fù)載測試:測試最大用戶數(shù)
當(dāng)我們錄制好腳本后,我們在腳本中插入監(jiān)聽器聚合報(bào)告席赂,設(shè)置循環(huán)測試三次吮铭,總共測試三次。我們通過從小到大的順序往上調(diào)整線程組數(shù)颅停,當(dāng)該線程數(shù)在測試的聚合報(bào)告中剛好出現(xiàn)error谓晌,那么該次數(shù)就作為最大用戶數(shù)。
- ps:負(fù)載測試的時(shí)候要注意線程組啟動(dòng)時(shí)間癞揉,要注意避免一開始的壓力過大纸肉;我們在線程組設(shè)置3次是為了避免線程組某些啟動(dòng)過快某些啟動(dòng)過慢造成實(shí)際最大用戶數(shù)有出入;測試三次是為了更準(zhǔn)確測試最大用戶數(shù)喊熟,避免恰巧某一次測試沒報(bào)錯(cuò)導(dǎo)致誤判最大用戶數(shù)的情形
壓力測試:測試有效用戶數(shù)
當(dāng)我們要根據(jù)公司的規(guī)定測試最大用戶數(shù)的時(shí)候柏肪,公司也會讓我們測試最大有效用戶數(shù)(公司一般會讓給我們相關(guān)數(shù)據(jù)如有效cpu占用率,網(wǎng)絡(luò)占用率等等芥牌,而這些我們可以通過軟件Spotlight for windows監(jiān)控)烦味。當(dāng)我們測出來最大有效用戶數(shù)后,我們就可以根據(jù)公司給定的壓力時(shí)間進(jìn)行測試壁拉。這個(gè)時(shí)候我們就可以在線程組設(shè)置循環(huán)次數(shù)設(shè)置為永遠(yuǎn)谬俄,調(diào)度器設(shè)置為XXXXX秒。
PS:要注意準(zhǔn)備充足數(shù)據(jù)弃理,不然時(shí)間還未到溃论,數(shù)據(jù)就跑完了
并發(fā)測試:
并發(fā)測試很簡單,只要測試一個(gè)集合點(diǎn)案铺,測試在等待多少個(gè)用戶一起啟動(dòng)的時(shí)候會出現(xiàn)error蔬芥,記錄下該用戶那就完成了并發(fā)測試了。
性能能測試改善:
分布式負(fù)載(聯(lián)機(jī)負(fù)載)測試:
在使用Jmeter進(jìn)行性能測試時(shí)控汉,如果并發(fā)數(shù)比較大(比如最近項(xiàng)目需要支持1000并發(fā))笔诵,單臺電腦的配置(CPU和內(nèi)存)可能無法支持,這個(gè)時(shí)候可以使用分布式負(fù)載姑子。分布式負(fù)載主要有三部分乎婿,一是控制機(jī),二是負(fù)載機(jī)街佑,三是服務(wù)器谢翎。
控制機(jī)(controller):存放jmeter腳本的機(jī)器(發(fā)號施令)
負(fù)載機(jī)(agent):被連接并用于運(yùn)行腳本的機(jī)器捍靠,負(fù)責(zé)產(chǎn)生負(fù)載(不需要腳本僅負(fù)責(zé)執(zhí)行)
服務(wù)器(the server):被用于測試的機(jī)器(被執(zhí)行)
-
分布式部署
負(fù)載機(jī):1.安裝jdk1.8或者8以上版本。2.設(shè)置環(huán)境變量森逮。3.獲取本機(jī)IP地址
控制機(jī):1榨婆,改配置文件:修改jmeter的bin目錄下的jmeter.properties,在properties中找到remote_hosts=....褒侧,添加遠(yuǎn)程負(fù)載機(jī)的ip和端口(端口默認(rèn)1099良风,IP不包括控制機(jī),如果修改該端口需要在負(fù)載機(jī)配置文件中修改server_prot=xxx)闷供,多個(gè)負(fù)載機(jī)之間用英文逗號隔開烟央。修改配置后重啟jmeter,修改后的配置即生效歪脏。
服務(wù)器:開啟服務(wù)即可疑俭。
-
操作:
負(fù)載機(jī)(m):運(yùn)行jmeter.server.bat
-
控制機(jī):啟動(dòng)jmeter,在選擇菜單run中的remote start運(yùn)行負(fù)載機(jī)(可以逐個(gè)運(yùn)行婿失,也可以全部一起運(yùn)行)钞艇;選擇腳本,設(shè)置線程數(shù)為n移怯,最終服務(wù)器承受的線程數(shù)=負(fù)載機(jī)個(gè)數(shù)*線程數(shù)n
-
注意:
-
1.如你是用的是4.0以及以后版本的jmeter香璃,那可能會報(bào)找不到rmi_keystore.jks文件的錯(cuò)誤
-
1.如你是用的是4.0以及以后版本的jmeter香璃,那可能會報(bào)找不到rmi_keystore.jks文件的錯(cuò)誤
-
* 這個(gè)時(shí)候需要你修改bin目錄下jmeter.properties配置文件这难,將server.rmi.ssl.disable=XXX舟误,這個(gè)XXX要改成true
* ![](https://upload-images.jianshu.io/upload_images/12191514-3ca95879c922b0ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 2.如果控制機(jī)無法連接負(fù)載機(jī),那就先ping一下姻乓,看看網(wǎng)絡(luò)是否相同嵌溢,如果相同那就先看看是否開了殺毒軟件或者防火墻,如果開啟了就關(guān)閉再重啟連接(一般來說負(fù)載機(jī)關(guān)了防火墻就能被連接蹋岩,控制機(jī)關(guān)防火墻就可以接收報(bào)告)
* 3.運(yùn)行腳本的時(shí)候赖草,要保證使用腳本調(diào)用的參數(shù)名和提取數(shù)據(jù)的路徑(路徑可使用相對路徑)要相同
* 4.要根據(jù)實(shí)際系統(tǒng)的業(yè)務(wù)先確認(rèn)所有的負(fù)載機(jī)是否能用同一份數(shù)據(jù),如果數(shù)據(jù)要保持唯一性(如注冊)剪个,那么各個(gè)負(fù)載機(jī)數(shù)據(jù)就不能用同一份秧骑,如果沒有唯一性,那么就可以用同一份
非GUI模式運(yùn)行:
講非GUI模式運(yùn)行的時(shí)候我們先來看看GUI和非GUI兩者的區(qū)別:
gui:界面會消耗很多資源扣囊,并且運(yùn)行的結(jié)果是保存在Jmeter運(yùn)行的內(nèi)存中乎折。當(dāng)時(shí)間一長,內(nèi)存增長到一定程度侵歇,就會報(bào)錯(cuò)骂澄,甚至假死。
非gui:實(shí)時(shí)的將運(yùn)行l(wèi)og文件保存到本地文件中惕虑,不會撐爆內(nèi)存坟冲。并且對機(jī)器的資源占用也較少磨镶。
好,上面的的說的很清楚為什么要用非GUI健提,就是因?yàn)榉荊UI占用資源少嘛琳猫!
-
操作步驟
1.打開命令窗口,進(jìn)入存放腳本的目錄:
-
2.輸入命令:jmeter -n -t lookgoods.jmx -l lookgoods_res.jtl -r -X
- PS:其中-n指非GUI模式運(yùn)行私痹;-t指要執(zhí)行的腳本文件XXX沸移,-l指定保存測試統(tǒng)計(jì)結(jié)果的jtl文件XXX;-r指在jmeter.properties文件內(nèi)定義的所有遠(yuǎn)程主機(jī)上運(yùn)行測試(這樣就可以進(jìn)行負(fù)載測試)侄榴,-X指在非GUI模式運(yùn)行時(shí)雹锣,運(yùn)行完測試自動(dòng)退出遠(yuǎn)程主機(jī),即斷開連接癞蚕。生成的jtl測試結(jié)果文件和腳本在同一目錄下
注意:
- 若你們需要改變文件的存儲位置蕊爵,可以再命令 jmeter -n -t lookgoods.jmx -l lookgoods_res.jtl -r -X的lookgoods_res.jtl前面加地址(相對路徑或者絕對路徑)
系統(tǒng)資源監(jiān)控改進(jìn)
在實(shí)際操作中,我們可能會使用window自帶的cup監(jiān)視器桦山,也可能會用其他的cup監(jiān)視器如Spotlight攒射。但是window自帶的監(jiān)視器功能不夠完善,用其他的會占用內(nèi)存恒水,這個(gè)時(shí)候就可以遠(yuǎn)程監(jiān)控cpu会放。 有能力的可以去了解一下