AB(Apache Benchmark)
Apache Benchmark 是一個簡單易用的,可以幫助理解HTTP服務器如何處理大量流量的工具。該工具預裝在MacOS上,Linux發行版可使用任何包管理工具進行安裝。要閱讀更多關於Apache Benchmark的信息並瞭解它能做的事情,可鍵入 ”man ab“。
我們可以使用AB在特定的端口上出發特定數量的請求。我們還可以控制其他參數,例如併發(它會同時觸發多少個請求)。
執行命令:
ab -c 100 -n 1000000 -H ‘host:RateLimitingWebServer’ ‘http://127.0.0.1:4140/api/v1/limiting/tryAcquire?resource=jg-app_demo-HelloWorld&key=testKey’
JMeter
相對於Apache Benchmark,JMeter是一個更加強大的工具,允許對流量觸發方式有更具體的指定。例如,使用Jmeter可以實現”在1分鐘之內發送1000個請求“,這更符合實際。他是可配置的,提供了一個GUI來幫助使用者設置測試。
圖形界面主要用於創建、調試測試腳本,然後再在服務器端用命令行模式執行腳本,得出結果。
本地UI界面生成jmx腳本文件,上傳至服務器
- 測試計劃中添加線程組,一個Test Plan下可添加多個 Thread Group 以進行多個接口的混合測試。(注意多個接口測試的情況,需要將HTTP名稱設置不同的名字,否則測試報告中將無法區分)
Thread Group節點有三個常用配置項:
- Number of Threads(users):用於配置併發用戶數,類似於ab中的-c參數
- Ramp-up period(seconds):用於配置啓動併發用戶數的時間段,比如Number of Threads配置爲10,而Ramp-up period配置爲5s,則每秒鐘啓動2個線程,該參數可用於程序的預熱。
- Loop Count:設置循環次數,比如配置爲10,Number of Threads配置爲5,則總的請求數爲50。這個配置項也能勾選”Infinite“複選框,表示無限循環執行測試,需要手動停止測試執行。
- 線程組下添加測試樣例,可根據不同接口協議選擇不同種類,以HTTP Request爲例,添加後可配置HTTP Request的各種屬性
(Thread Group下也可添加一些Config Element,包括針對不同協議的其他配置設置,比如HTTP Header Manager配置請求頭中的一些參數)
注:在Header中指定”host“屬性時,需要在其值中添加端口信息,否則發起請求時默認將Request中的端口附加到host屬性值上。可以在host屬性值後添加”:80“端口,提交請求時,該80端口會被忽略。
-
添加Listener監聽結果,可以嘗試不同的Listener,查看具體結果或統計信息。
-
服務端命令行模式執行測試腳本
https://jmeter.apache.org/usermanual/get-started.html#non_gui
./bin/jmeter -n -t flowControl.jmx -l log-u100.jtl
- -n:CLI模式
- -t:指定腳本文件
- -l:生成結果日誌
- 下載結果日誌到本地,根據結果生成報告;也可以在服務器端生成報告後下載到本地。
https://jmeter.apache.org/usermanual/generating-dashboard.html#report
./bin/jmeter -g log-u100.jtl -o ./report-u100
- -g:指定結果日誌
- -o:指定報告生成地址目錄
也可以在JMeter圖形界面中使用某個Listener導入結果日誌,可看到彙總信息。
參考文章:
https://medium.com/@harrietty/load-testing-an-api-with-apache-benchmark-or-jmeter-24cfe39d3a23
JMeter最佳實踐:https://jmeter.apache.org/usermanual/best-practices.html