1 JMeter
1.1 引言
在日常開(kāi)發(fā)中,當(dāng)完成一個(gè)接口開(kāi)發(fā)時(shí),需要對(duì)接口進(jìn)行準(zhǔn)確性測(cè)試,比如PostMan、Swagger等,但在接口上線運(yùn)行前對(duì)其進(jìn)行性能測(cè)試是很有必要的,就是所謂的接口壓力測(cè)試。
壓力測(cè)試就是考察當(dāng)前軟硬件環(huán)境下系統(tǒng)所能承受的最大負(fù)荷,并借助結(jié)果找出系統(tǒng)瓶頸所在。使用壓力測(cè)試可以找到更難發(fā)現(xiàn)的問(wèn)題,比如:內(nèi)存泄漏,并發(fā)和同步。
有效的壓力測(cè)試系統(tǒng)將應(yīng)用一下這些關(guān)鍵條件:重復(fù)、并發(fā)、量級(jí)、隨機(jī)變化。
1.2 壓力測(cè)試指標(biāo)
壓力測(cè)試指標(biāo):
- 響應(yīng)時(shí)間(
Response Time : RT)
響應(yīng)時(shí)間指用戶(hù)從客戶(hù)端發(fā)起一個(gè)請(qǐng)求開(kāi)始,到客戶(hù)端接收到從服務(wù)器端返回的響應(yīng)結(jié)束,整個(gè)過(guò)程所耗費(fèi)的時(shí)間,下面熟悉一下結(jié)果名詞:-
HPS(Hits Per Second):每秒點(diǎn)擊次數(shù),單位是次/秒 -
TPS(Transaction Per Second):系統(tǒng)每秒處理交易數(shù),單位是筆/秒 -
QPS(Query Per Second):系統(tǒng)每秒處理查詢(xún)次數(shù),單位是次/秒
-
- 最大響應(yīng)時(shí)間(
Max Response Time):指用戶(hù)發(fā)出請(qǐng)求或者指令到系統(tǒng)做出反應(yīng)(響應(yīng))的最大時(shí)間 - 最少響應(yīng)時(shí)間(
Mininum Response Time):指用戶(hù)發(fā)出請(qǐng)求或者指令到系統(tǒng)做出反應(yīng)(響應(yīng))的最少時(shí)間 -
90%響應(yīng)時(shí)間(90% Response Time):是指所有用戶(hù)的響應(yīng)時(shí)間進(jìn)行排序,第90%的響應(yīng)時(shí)間
對(duì)于互聯(lián)網(wǎng)業(yè)務(wù),某些業(yè)務(wù)有且僅有一個(gè)請(qǐng)求連接,那么TPS=QPS=HPS,一般情況下,用TPS來(lái)衡量整個(gè)業(yè)務(wù)流程,用QPS來(lái)衡量接口查詢(xún)次數(shù),用HPS來(lái)表示對(duì)服務(wù)器單擊請(qǐng)求。無(wú)論TPS、QPS、HPS,此指標(biāo)是衡量系統(tǒng)處理能力非常重要的指標(biāo),越大越好。
一般情況下:
金融行業(yè):1000TPS~50000TPS,不包括互聯(lián)網(wǎng)化的活動(dòng)
保險(xiǎn)行業(yè):100TPS~1000000TPS,不包括互聯(lián)網(wǎng)化的活動(dòng)
制造業(yè):10TPS~5000TPS
互聯(lián)網(wǎng)電子商務(wù):10000TPS~10000000TPS
互聯(lián)網(wǎng)中型網(wǎng)站:1000TPS~50000TPS
互聯(lián)網(wǎng)小型網(wǎng)站:500TPS~10000TPS
性能測(cè)試主要關(guān)注如下三個(gè)指標(biāo):
-
吞吐量:每秒鐘系統(tǒng)能夠處理的請(qǐng)求數(shù)、任務(wù)數(shù),該值越大越好 -
響應(yīng)時(shí)間:服務(wù)處理一個(gè)請(qǐng)求或一個(gè)任務(wù)的耗時(shí) -
錯(cuò)誤率:一批請(qǐng)求中結(jié)果出錯(cuò)的請(qǐng)求所占比例
1.3 JMeter工具使用
1.3.1 JMeter安裝
官網(wǎng): https://jmeter.apache.org/

需要注意的是:JMeter5.3版本要求Java8以上版本
將下載的壓縮包解壓后,進(jìn)入到bin目錄中,雙擊執(zhí)行 jmeter.bat,會(huì)進(jìn)入到下面這個(gè)頁(yè)面。
1.3.2 切換成中文
選項(xiàng) > 選擇語(yǔ)言 > 中文

1.3.3 添加線程組
添加線程組,創(chuàng)建模擬多少個(gè)并發(fā)用戶(hù)

1.3.4 添加HTTP請(qǐng)求
創(chuàng)建完線程組后,再添加http請(qǐng)求,表示要對(duì)哪個(gè)接口進(jìn)行測(cè)試


1.3.5 添加監(jiān)聽(tīng)器
為需要壓測(cè)的http請(qǐng)求添加監(jiān)聽(tīng)器,用戶(hù)生成測(cè)試結(jié)果


1.3.6 自動(dòng)壓測(cè)

1.4 JMeter Address Already in use 錯(cuò)誤解決
這個(gè)問(wèn)題是Windows本身提供的端口訪問(wèn)機(jī)制引發(fā)的,Windows提供給TCP/IP鏈接的端口為1024-5000,并且要四分鐘來(lái)循環(huán)回收它們,這樣會(huì)導(dǎo)致我們?cè)谳^短時(shí)間內(nèi)跑大量的請(qǐng)求時(shí)將端口占滿了。
解決方法:
cmd中,用regedit命令打開(kāi)注冊(cè)表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Tcpip\Parameters下
- 右擊
parameters,添加兩個(gè)新的DWORD,名字為MaxUserPort和TCPTimedWaitDelay - 然后雙擊
MaxUserPort,輸入數(shù)值數(shù)據(jù)為65534(十進(jìn)制),如果是分布式運(yùn)行的話,控制機(jī)器和負(fù)載機(jī)器都需要這樣操作 -
TCPTimedWaitDelay30(十進(jìn)制),表示把端口回收時(shí)間從4分鐘,改為30秒
修改配置完畢之后,記得重啟機(jī)器才會(huì)生效