一.下載及安裝教程
1. http://jmeter.apache.org/download_jmeter.cgi?下載
2.解壓這個(gè)jmeter包
3.cd到這個(gè)解壓包的bin目錄
4.sh jmeter 打開(kāi)jmeter
二.第一個(gè)jmeter測(cè)試
1.添加線(xiàn)程組
??????? 在測(cè)試計(jì)劃右鍵彈出下拉菜單(添加-->Threads(Users)--->線(xiàn)程組)中選擇線(xiàn)程組即可省有。
??????? 線(xiàn)程組主要包含三個(gè)參數(shù):線(xiàn)程數(shù)骗爆、準(zhǔn)備時(shí)長(zhǎng)(Ramp-Up?Period(in?seconds))、循環(huán)次數(shù)枉昏。
(1)線(xiàn)程數(shù):虛擬用戶(hù)數(shù)干花。一個(gè)虛擬用戶(hù)占用一個(gè)進(jìn)程或線(xiàn)程妄帘。設(shè)置多少虛擬用戶(hù)數(shù)在這里也就是設(shè)置多少個(gè)線(xiàn)程數(shù)。
(2)準(zhǔn)備時(shí)長(zhǎng):?設(shè)置的虛擬用戶(hù)數(shù)需要多長(zhǎng)時(shí)間全部啟動(dòng)池凄。如果線(xiàn)程數(shù)為20?抡驼,準(zhǔn)備時(shí)長(zhǎng)為10?,那么需要10秒鐘啟動(dòng)20個(gè)線(xiàn)程肿仑。也就是每秒鐘啟動(dòng)2個(gè)線(xiàn)程致盟。
(3)循環(huán)次數(shù):每個(gè)線(xiàn)程發(fā)送請(qǐng)求的次數(shù)。如果線(xiàn)程數(shù)為20?尤慰,循環(huán)次數(shù)為100?馏锡,那么每個(gè)線(xiàn)程發(fā)送100次請(qǐng)求「钤瘢總請(qǐng)求數(shù)為20*100=2000?眷篇。如果勾選了“永遠(yuǎn)”,那么所有線(xiàn)程會(huì)一直發(fā)送請(qǐng)求荔泳,一到選擇停止運(yùn)行腳本蕉饼。
??????? 設(shè)置合理的線(xiàn)程數(shù)對(duì)于能否達(dá)到測(cè)試目標(biāo)有決定性的影響虐杯。在本例中,要求得到網(wǎng)站首頁(yè)在20?QPS?負(fù)載情況下的響應(yīng)時(shí)間昧港,如果如果線(xiàn)程數(shù)量設(shè)置的過(guò)小擎椰,則很可能無(wú)法達(dá)到設(shè)定的QPS要求。另外创肥,設(shè)置合理的循環(huán)次數(shù)也很重要达舒,除了上面介紹的固定循環(huán)次數(shù)與永遠(yuǎn)外;也可以靈活的選擇設(shè)定測(cè)試運(yùn)行時(shí)間叹侄。勾選“調(diào)度器”巩搏,進(jìn)行調(diào)度器配置。
2.添加http請(qǐng)求
??????? 線(xiàn)程組上右鍵菜單(添加--->Sampler--->HTTP請(qǐng)求)選擇HTTP請(qǐng)求趾代。
配置參數(shù):
(1)名稱(chēng):本屬性用于標(biāo)識(shí)一個(gè)取樣器贯底,建議使用一個(gè)有意義的名稱(chēng)。
(2)注釋?zhuān)簩?duì)于測(cè)試沒(méi)有任何作用撒强,僅用戶(hù)記錄用戶(hù)可讀的注釋信息禽捆。
(3)服務(wù)器名稱(chēng)或IP?:HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱(chēng)或IP地址。比如:mini-dev-finance.haimaiche.net
端口號(hào):目標(biāo)服務(wù)器的端口號(hào)飘哨,默認(rèn)值為80?胚想。
(4)協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求時(shí)的協(xié)議,可以是http或者是https?芽隆,默認(rèn)值為http?浊服。
(5)方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括GET摆马、POST臼闻、HEAD、PUT囤采、OPTIONS述呐、TRACE、DELETE等蕉毯。
Content?encoding?:內(nèi)容的編碼方式乓搬,默認(rèn)值為iso8859
(6)路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口)。比如:/v2/appHomePage/appShow.json
自動(dòng)重定向:如果選中該選項(xiàng)代虾,當(dāng)發(fā)送HTTP請(qǐng)求后得到的響應(yīng)是302/301時(shí)进肯,JMeter?自動(dòng)重定向到新的頁(yè)面。
(7)Use?keep?Alive?:?當(dāng)該選項(xiàng)被選中時(shí)棉磨,jmeter?和目標(biāo)服務(wù)器之間使用?Keep-Alive方式進(jìn)行HTTP通信江掩,默認(rèn)選中。
(8)Use?multipart/from-data?for?HTTP?POST?:當(dāng)發(fā)送HTTP?POST?請(qǐng)求時(shí),使用Use?multipart/from-data方法發(fā)送环形,默認(rèn)不選中策泣。
(9)同請(qǐng)求一起發(fā)送參數(shù)?:?在請(qǐng)求中發(fā)送URL參數(shù),對(duì)于帶參數(shù)的URL?抬吟,jmeter提供了一個(gè)簡(jiǎn)單的對(duì)參數(shù)化的方法萨咕。用戶(hù)可以將URL中所有參數(shù)設(shè)置在本表中,表中的每一行是一個(gè)參數(shù)值對(duì)(對(duì)應(yīng)RUL中的?名稱(chēng)1=值1)火本。
(10)同請(qǐng)求一起發(fā)送文件:在請(qǐng)求中發(fā)送文件危队,通常,HTTP文件上傳行為可以通過(guò)這種方式模擬钙畔。
(11)從HTML文件獲取所有有內(nèi)含的資源:當(dāng)該選項(xiàng)被選中時(shí)茫陆,jmeter在發(fā)出HTTP請(qǐng)求并獲得響應(yīng)的HTML文件內(nèi)容后,還對(duì)該HTML進(jìn)行Parse?并獲取HTML中包含的所有資源(圖片刃鳄、flash等)盅弛,默認(rèn)不選中,如果用戶(hù)只希望獲取頁(yè)面中的特定資源叔锐,可以在下方的Embedded?URLs?must?match?文本框中填入需要下載的特定資源表達(dá)式,這樣见秽,只有能匹配指定正則表達(dá)式的URL指向資源會(huì)被下載愉烙。
(12)用作監(jiān)視器:此取樣器被當(dāng)成監(jiān)視器,在Monitor?Results?Listener?中可以直接看到基于該取樣器的圖形化統(tǒng)計(jì)信息解取。默認(rèn)為不選中步责。
(13)Save?response?as?MD5?hash??:選中該項(xiàng),在執(zhí)行時(shí)僅記錄服務(wù)端響應(yīng)數(shù)據(jù)的MD5值禀苦,而不記錄完整的響應(yīng)數(shù)據(jù)蔓肯。在需要進(jìn)行數(shù)據(jù)量非常大的測(cè)試時(shí),建議選中該項(xiàng)以減少取樣器記錄響應(yīng)數(shù)據(jù)的開(kāi)銷(xiāo)振乏。
3.設(shè)置QPS限制
在http請(qǐng)求上添加(添加--->定時(shí)器--->Constant?Throughput?Timer)
屬性參數(shù):
(1)Target?throughput(in?samples?per?minute):目標(biāo)吞吐量蔗包。注意這里是每分鐘發(fā)送的請(qǐng)求數(shù),因此慧邮,對(duì)應(yīng)測(cè)試需求中所要求的20?QPS?调限,這里的值應(yīng)該是1200?。
(2)Calculate?Throughput?based?on?:有5個(gè)選項(xiàng)
4.添加監(jiān)聽(tīng)器
??????? 右鍵點(diǎn)擊線(xiàn)程組误澳,在彈的菜單(添加--->監(jiān)聽(tīng)器--->聚合報(bào)告)中選擇聚合報(bào)告耻矮。
?????? 也可以生成其他監(jiān)聽(tīng)器
監(jiān)控結(jié)果需要關(guān)注的有:成功率、響應(yīng)時(shí)間忆谓、標(biāo)準(zhǔn)差裆装、CPU、mem內(nèi)存、io等
5.聚合報(bào)告分析
6.響應(yīng)結(jié)果出現(xiàn)亂碼
當(dāng)響應(yīng)內(nèi)容沒(méi)有設(shè)定編碼時(shí)哨免,jmeter會(huì)按照jmeter.properties文件中設(shè)定的編碼進(jìn)行解碼茎活。默認(rèn)的編碼為ISO-8859-1,所以在解析中文時(shí)出錯(cuò)铁瞒。
解決辦法:
添加后置處理器--BeanShellPostProcessor
設(shè)置編碼為UTF-8
7.jemter自帶后置處理器妙色,正則表達(dá)式提取,可用來(lái)提取接口響應(yīng)的信息慧耍,給后續(xù)接口傳參使用
假設(shè)我們要取登錄接口的sessionId字段
先添加后置處理器--正則表達(dá)式
(1)名稱(chēng):取一個(gè)有意義的名稱(chēng)
(2)Apply to:應(yīng)用范圍(一般就選擇默認(rèn)的Main sample
only)身辨,就算有重定向,一般也是提取最終那個(gè)請(qǐng)求的接口芍碧。
(3)要檢查的響應(yīng)字段:
主體:
接口響應(yīng)主體內(nèi)容煌珊,一般要提取普通http響應(yīng)結(jié)果的數(shù)據(jù),都勾選這個(gè)泌豆。
信息頭:響應(yīng)頭的所有內(nèi)容定庵。
Request
Headers:請(qǐng)求頭的所有內(nèi)容。
url:是對(duì)sample的url進(jìn)行匹配踪危,也就是查看結(jié)果樹(shù)里請(qǐng)求內(nèi)容的第一行url蔬浙,不包含data里的請(qǐng)求參數(shù)(即只能匹配protocol(協(xié)議)+host+path+querystring,如:https://www.baidu.com/index.php?tn=monline_3_dg)贞远。
響應(yīng)代碼:http響應(yīng)代碼畴博,如101,200,302,404,501等。
響應(yīng)信息:http響應(yīng)代碼對(duì)應(yīng)的響應(yīng)信息蓝仲,例如:OK,
Found(HTTP/1.1 200 Ok俱病;HTTP/1.1 302 Found)。
(4)引用名稱(chēng):其他地方引用時(shí)的變量名稱(chēng)比如sessionId袱结,名稱(chēng)只能是一個(gè)亮隙,引用方法:${sessionId}
(5)
正則表達(dá)式:
數(shù)據(jù)提取器,一般簡(jiǎn)單的通用語(yǔ)法就是:左邊界(.*?)右邊界垢夹,(.*?)
是替換了想要提取的內(nèi)容溢吻,里面的'?'為非貪婪匹配,(非貪婪模式就是說(shuō)在遇到第一個(gè)右邊界后就停止匹配棚饵,這樣就可以精確拿到想要的內(nèi)容)煤裙。建議均使用非貪婪匹配,除非特殊情況噪漾。"sessionId":"(.*?)","settedTradePwd":(.*?),"type":(.*?), 注意 (.*?)要不要加""取決于返回的這個(gè)字段的值有沒(méi)有""
模板:
對(duì)應(yīng)正則表達(dá)式提取器類(lèi)型硼砰,樣式為:$n$。若模板為:$0$欣硼,則為整個(gè)表達(dá)式匹配到的內(nèi)容题翰,就是包括小括號(hào)內(nèi)跟小括號(hào)外的內(nèi)容,即("sessionId":"d116c405a75e406db7e74eaee5e02d8d","settedTradePwd":0,"type":1,"userId":30289)。若模板為:$1$豹障,則對(duì)應(yīng)正則表達(dá)式中的第一個(gè)(.*?)所匹配的內(nèi)容冯事,即(d116c405a75e406db7e74eaee5e02d8d),若模板為:$2$血公,則對(duì)應(yīng)正則表達(dá)式中的第二個(gè)(.*?)所匹配的內(nèi)容昵仅,即(0),若模板為$1$$2$累魔,則把2個(gè)(.*?)所匹配的內(nèi)容拼接起來(lái)摔笤,即(d116c405a75e406db7e74eaee5e02d8d0)。
匹配數(shù)字:
正則表達(dá)式匹配數(shù)據(jù)的最終結(jié)果可以看做一個(gè)數(shù)組垦写,匹配數(shù)字即可看做是數(shù)組的第幾個(gè)元素吕世。當(dāng)為?0?時(shí),隨機(jī)返回匹配的數(shù)據(jù)梯投。當(dāng)為?1?時(shí)命辖,表示返回匹配結(jié)果數(shù)組的第一個(gè)元素。當(dāng)為負(fù)數(shù)(-1分蓖,-2饼疙,-100都可以)時(shí)悦陋,表示返回全部元素锡足,并且同時(shí)會(huì)返回一個(gè)元素總數(shù)的變量篮昧,在引用時(shí):通過(guò)${sessionId_g1}的方式來(lái)取第1個(gè)匹配的內(nèi)容,${sessionId_g2}來(lái)取第2個(gè)匹配的內(nèi)容午磁。
缺省值:
匹配失敗時(shí)的默認(rèn)值。通常用于后續(xù)的邏輯判斷毡们,建議使用一些特殊含義的迅皇,比如0,NULL衙熔,ERROR等登颓。
正則測(cè)試,添加后置處理器Debug PostProcessor,
正則結(jié)果查看红氯,添加查看結(jié)果樹(shù)框咙,在Debug
PostProcessor查看變量值,以下就是返回的變量值