發現一款後端程序員必備的壓測工具,十分鐘就能上手,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語言的壓測引擎

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

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

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

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

壓測流程

1、壓測模塊位於API調試模塊下,在進行接口調試時可以看到,如圖所示:

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

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

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

壓測結果計算方式: