由于項(xiàng)目需要,最近對(duì)產(chǎn)品的性能做了簡(jiǎn)單的性能測(cè)試,調(diào)研了常用的幾款性能測(cè)試工具。
| - | LoadRunner | Jmeter | Locust |
|---|---|---|---|
| 授權(quán)方式 | 商業(yè)收費(fèi) | 開(kāi)源免費(fèi) | 開(kāi)源免費(fèi) |
| 開(kāi)發(fā)語(yǔ)言 | C/Java | Java | Python |
| 測(cè)試腳本形式 | C/Java | GUI | Python |
| 并發(fā)機(jī)制 | 進(jìn)程/線程 | 線程 | 協(xié)程 |
| 單機(jī)并發(fā)能力 | 低 | 低 | 高 |
| 資源監(jiān)控 | 支持 | 不支持 | 不支持 |
| 報(bào)告與分析 | 完善 | 簡(jiǎn)單圖表 | 簡(jiǎn)單圖表 |
| 支持二次開(kāi)發(fā) | 不支持 | 支持 | 支持 |
| 分布式壓力 | 支持 | 支持 | 支持 |
| 測(cè)試平臺(tái) | 控制端只能是window,壓測(cè)端可以是window/linx | window/linux | window/linux |
本地測(cè)試環(huán)境
| 部署環(huán)境 | MacBook Pro |
|---|---|
| 內(nèi)存 | 8 GB |
| 處理器 | 2.7 GHz Intel Core i5 |
Jmeter
Jmeter是Apache提供的一款功能比較齊全的性能測(cè)試工具。用例既可以通過(guò)GUI進(jìn)行編寫,也可以通過(guò)錄制腳本的方式創(chuàng)建。另外,Jmeter也可以作為應(yīng)用的功能/回歸測(cè)試,通過(guò)設(shè)定結(jié)果斷言,腳本會(huì)自動(dòng)判斷請(qǐng)求是否返回了正確結(jié)果。
Jmeter GUI是Jmeter的圖形模式,提供可視化的編輯方式,多樣的監(jiān)聽(tīng)器,適合于創(chuàng)建測(cè)試計(jì)劃以及腳本調(diào)試。
下圖是以Jmeter GUI方式配置壓力

然而,GUI方式需要耗費(fèi)較多的系統(tǒng)資源(尤其是腳本中的監(jiān)聽(tīng)器),從而影響里Jmeter單機(jī)性能。因此在大壓力場(chǎng)景下CLI方式較為合適,此外,CLI方式可以生成HTML測(cè)試報(bào)告。
參考命令
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
jmx file:測(cè)試計(jì)劃的文件名稱
result file:輸出文件路徑,可以是結(jié)果日志名稱
Path to output folder:要保存的report文件路徑
-n:非GUI模式執(zhí)行JMeter
-t:執(zhí)行測(cè)試文件所在的位置
-l:保存測(cè)試結(jié)果的文件,jtl文件格式
-e:測(cè)試結(jié)束后,生成測(cè)試報(bào)告
-o:指定測(cè)試報(bào)告的存放位置
-H:幫助
使用方式:
- 直接生成HTML報(bào)告
jmeter -n -t /Users/zhang/Desktop/worksapce/***/***.jmx -e -l test.txt -o test.html

- 根據(jù)已有的jtl類型文件生成HTML
jmeter -g test.txt -o test1.html
ref:
線程組內(nèi)并發(fā)參數(shù)設(shè)置(JMeter之Ramp-up Period(in seconds)說(shuō)明)
LoadRunner
成熟的商業(yè)軟件,價(jià)格極其昂貴,功能最為豐富和全面,網(wǎng)上的學(xué)習(xí)資料較多。目前只支持windows平臺(tái),單機(jī)難以產(chǎn)生較高的并發(fā)壓力,linux&docker可以作物負(fù)載發(fā)生器
Locust
采用多線程/多進(jìn)程來(lái)模擬多用戶時(shí),線程數(shù)會(huì)隨著并發(fā)數(shù)的增加而增加,而線程之間上下文的的切換損耗資源的,IO的阻塞和線程的sleep會(huì)不可避免的導(dǎo)致并發(fā)效率下降;正因如此,LoadRunner和Jmeter這類采用進(jìn)程和線程的測(cè)試工具,都很難在單機(jī)上模擬出較高的并發(fā)壓力。
Locust采用python腳本編寫,使用了協(xié)程(gevent)機(jī)制并發(fā)。由于協(xié)程自身特點(diǎn),避免了并發(fā)場(chǎng)景下由于多線程/多進(jìn)程切換造成的資源開(kāi)銷,極大提高了系統(tǒng)資源利用率,大大提高了單機(jī)并發(fā)效率。
此外Locust的代碼結(jié)構(gòu)清晰,核心代碼量也只有幾百行,可擴(kuò)展性也非常不錯(cuò)。
性能指標(biāo)監(jiān)控和測(cè)試報(bào)告圖表方面比較缺失,數(shù)據(jù)統(tǒng)計(jì)不如LoadRunner及Jmeter完備。
統(tǒng)計(jì)報(bào)表頁(yè)面

- Type: 請(qǐng)求的類型,例如GET/POST。
- Name:請(qǐng)求的路徑。
- request:當(dāng)前請(qǐng)求的數(shù)量。
- fails:當(dāng)前請(qǐng)求失敗的數(shù)量。
- Median:中間值,單位毫秒,一半的服務(wù)器響應(yīng)時(shí)間低于該值,而另一半高于該值。
- Average:平均值,單位毫秒,所有請(qǐng)求的平均響應(yīng)時(shí)間。
- Min:請(qǐng)求的最小服務(wù)器響應(yīng)時(shí)間,單位毫秒。
- Max:請(qǐng)求的最大服務(wù)器響應(yīng)時(shí)間,單位毫秒。
- Content Size:?jiǎn)蝹€(gè)請(qǐng)求的大小,單位字節(jié)。
- reqs/sec:是每秒鐘請(qǐng)求的個(gè)數(shù)。
同樣的Locust也有no-web方式,以減少客戶端資源消耗
locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m
啟動(dòng)參數(shù):
--no-web 表示不使用Web界面運(yùn)行測(cè)試。
-c 設(shè)置虛擬用戶數(shù)。
-r 設(shè)置每秒啟動(dòng)虛擬用戶數(shù)。
-t 設(shè)置設(shè)置運(yùn)行時(shí)間。
ab
ab 測(cè)試工具是 Apache 提供的一款測(cè)試工具,具有簡(jiǎn)單易上手的特點(diǎn),適合于單接口測(cè)試,實(shí)際項(xiàng)目中比較雞肋。
具有基本性能統(tǒng)計(jì)數(shù)據(jù),無(wú)統(tǒng)計(jì)報(bào)表
