項(xiàng)目背景:我們的項(xiàng)目近期增加了一個(gè)對(duì)app進(jìn)行登錄和瀏覽統(tǒng)計(jì)的需求,來(lái)記錄客戶的設(shè)備情況和瀏覽情況來(lái)調(diào)整業(yè)務(wù)結(jié)果,會(huì)存在比較大的多并發(fā)情況,需要用到壓力測(cè)試,在這里記錄一下Jmeter進(jìn)行壓力測(cè)試的相關(guān)步驟和遇到的問(wèn)題。
準(zhǔn)備工作
下載安裝Jmeter
直接到官網(wǎng): http://jmeter.apache.org/download_jmeter.cgi 進(jìn)行下載安裝,第一次我安裝了 Source版本
jmeter下載.png
在我解壓之后進(jìn)入到Jmeter目錄的bin文件夾,可以看到j(luò)meter文件,執(zhí)行 sh jmeter 命令,發(fā)現(xiàn)報(bào)錯(cuò)了:
jmeter命令行報(bào)錯(cuò).png
我發(fā)現(xiàn)在我的bin目錄下確實(shí)沒(méi)有ApacheJMeter.jar
于是我去下載了Binaries版本的,這次發(fā)現(xiàn)bin目錄下有ApacheJMeter.jar文件
Binaries版本目錄.png
之后再次打開(kāi)jmeter文件
打開(kāi)Jmeter.png
發(fā)現(xiàn)已經(jīng)可以成功打開(kāi)了
測(cè)試用例
接下來(lái)可以找個(gè)接口試一試
已經(jīng)打開(kāi)了Jmeter了,接下來(lái)我們創(chuàng)建一個(gè)http請(qǐng)求來(lái)給接口發(fā)點(diǎn)東西,我用我們項(xiàng)目測(cè)試環(huán)境的登錄為例子:
登錄接口.png
好,接下來(lái)到j(luò)meter里面去弄一弄
首先,添加線程組
添加線程組.png
添加HTTP請(qǐng)求.png
在http請(qǐng)求下加一個(gè)監(jiān)聽(tīng)器,上面可以看到:查看結(jié)果樹(shù),用來(lái)查看結(jié)果
好了,來(lái)模擬一下接口請(qǐng)求,看下上面的頁(yè)面里的請(qǐng)求,把參數(shù)和請(qǐng)求地址核對(duì)輸入jmeter模擬登錄接口.png
然后看一下結(jié)果
查看結(jié)果報(bào)錯(cuò).png
報(bào)錯(cuò)了,415錯(cuò)誤,不知道是什么錯(cuò),我們來(lái)看下請(qǐng)求內(nèi)容
查看結(jié)果請(qǐng)求情況.png
發(fā)現(xiàn)這個(gè)地方,Content-Type在我們之前的請(qǐng)求中是 application/json ,但是這里顯示的是 application/x-www-form-urlencoded,這肯定不行,先把這里修改一下再試試。
這里的Content-Type是在我們請(qǐng)求頭里的內(nèi)容,發(fā)現(xiàn)在Jmeter里面有一個(gè)HTTP信息頭管理器
信息頭管理.png
在信息頭管理器里面修改一下鏈接方式
請(qǐng)求頭鏈接類型設(shè)置.png
然后再運(yùn)行一下請(qǐng)求成功.png
400.png
請(qǐng)求是成功了,但是返回報(bào)了400錯(cuò)誤,參數(shù)的問(wèn)題,我們回頭把參數(shù)的形式改變一下,寫成json解析的數(shù)據(jù),回到http請(qǐng)求的位置,編輯Body Data
bodydata.png
再跑一遍試試
后臺(tái)返回成功.png
ok,成功啦,接下來(lái)我們做一下多并發(fā)
多并發(fā)
對(duì)一個(gè)或多個(gè)接口并發(fā)請(qǐng)求
多線程設(shè)置.png
1.為我們的線程組設(shè)置結(jié)果樹(shù),圖形結(jié)果或者聚合報(bào)告
2.線程數(shù):這里的線程數(shù)可以設(shè)置一共有多少個(gè)線程,也可以看成多少個(gè)用戶或接口訪問(wèn)者
3.間隔時(shí)間:我們?cè)O(shè)置為0的時(shí)候,可以看做同時(shí)訪問(wèn),也就是并發(fā)請(qǐng)求
接下來(lái)我們修改一下線程數(shù),可以分量級(jí)分別設(shè)置為10、100、1000、10000來(lái)模擬不同量級(jí)的請(qǐng)求情況多并發(fā)報(bào)告情況.png
在左邊我設(shè)置兩個(gè)接口請(qǐng)求,線程數(shù)設(shè)置為10,間隔時(shí)間為0,在聚合報(bào)告里面可以看到對(duì)于每個(gè)請(qǐng)求:①它統(tǒng)計(jì)響應(yīng)信息并提供請(qǐng)求數(shù) ②中位數(shù) ③平均值 ④最大 ⑤最小值 ⑥錯(cuò)誤率 ⑦大約吞吐量(以請(qǐng)求數(shù)/秒為單位)和以kb/秒為單位的吞吐量等.
注意的點(diǎn):因?yàn)橥掏铝渴菚?huì)把歷史記錄的數(shù)據(jù)也計(jì)算在內(nèi),兩個(gè)僅名稱不同的取樣器,其吞吐量為該兩個(gè)取樣器吞吐量總和的一半。所以對(duì)于不同取樣器應(yīng)該取不同的名字
給選擇器不同名字以區(qū)分統(tǒng)計(jì)報(bào)告.png
翻看了一下Jmeter的各種功能,確實(shí)很強(qiáng)大也集成得比較好,可以通過(guò)設(shè)置斷言來(lái)驗(yàn)證結(jié)果,做回歸測(cè)試也很方便。學(xué)習(xí)成本不高,簡(jiǎn)單實(shí)用,是個(gè)不錯(cuò)的選擇。


















