發現一款後端程式設計師必備的壓測工具,十分鐘就能上手,yyds

語言: CN / TW / HK

壓測背景

單介面壓測是為了能夠在開發階段對單個介面進行效能測試,快速瞭解介面的承載能力、發現效能瓶頸,在開發早期就能發現問題,消除效能風險。

作為一名優秀的後端工程師,在交付線上環境前,對自己的每一個介面進行簡單的效能檢測,是一種良好的職業習慣。

另外,當業務在生產環境遇到實際介面請求瓶頸時,通過模擬真實的併發環境,也是一種快速尋找問題的方式。

壓測結果的影響因素

高併發結果很容易受外界因素影響,壓測時需要儘量減少外界因素影響。

影響壓測結果外界因素有本機控制代碼數限制,dns解析速度,網路質量,服務端連線數限制等等。例如使用1w併發,很容易出現超過本機最大控制代碼數限制(一般最大限制1024),超過控制代碼數限制的請求會因為控制代碼數受限導致連線失敗。

因此選擇合適併發數對測試介面效能非常重要,並非併發數越大越好。

實際實踐中建議併發數先在10,100,500,1000左右分別測試下,如果失敗率小於1%,再考慮逐步增加併發數量。只有增加併發每秒請求數量能持續增加才是健康的使用方式。當併發數增加到一定數量後,介面響應能力不再增加或者錯誤數變高,這時候再增加併發量是無效的

壓測工具

1、Jmeter

Jmeter是apache公司基於java開發的一款開源壓力測試工具,體積小,功能全,支援http、https、websocket、grpc等協議的併發壓測。但缺點在於比較消耗單機效能,一般用於分散式壓測或作為壓測引擎使用。另外如果只想針對一個介面進行簡單測試,需要較深的操作路徑,使用起來較為繁瑣。

2、ab

ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache伺服器進行網站訪問壓力測試,也可以對或其它型別的伺服器進行壓力測試。比如nginx、tomcat、IIS等。

但唯一不足的是,ab基本是命令列執行,如果一個介面需要輸入較複雜的請求引數,操作起來會比較繁瑣。

3、Apipost

自7.0.12版本起,Apipost上線了單介面一鍵併發功能。據官方說法:底層採用了自研的基於Golang語言的壓測引擎

已開源:https://github.com/Apipost-Team/runnerGo

能較好的支援單機高併發壓測。目前支援http/https協議,對websocket、grpc等協議尚未支援。

下載:https://www.apipost.cn/download/ver10099

本文簡單介紹基於http/https協議的壓測實踐,出於便捷性考慮,這裡採用 Apipost 的壓測模組。

壓測流程

1、壓測模組位於API除錯模組下,在進行介面除錯時可以看到,如圖所示:

2、在輸入被壓測的URL後,在壓測tab下,填寫併發數和輪次;

3、點選【開始壓測】按鈕,頁面展示【壓測中...】狀態;

4、壓測任務完成後,頁面展示壓測結果,完成壓測。

壓測結果計算方式: