為什么需要分布式?
在工作中經常需要對一些關鍵接口做高QPS的壓測,JMeter是由Java 語言開發,沒創建一個線程(虛擬用戶),JVM默認會為每個線程分配1M的堆棧內存空間。受限于單臺試壓機的配置很難實現太高的并發。所以,通過JMeter實現分布式,可以整合多臺主機的硬件資源,實現同時對被測試接口進行壓力測試。
Jmeter分布式測試環境中有兩個角色:Master 和 Slaves
-
Master節點:向參與的Slaves節點發送測試腳本,并聚合Agent節點的執行結果。
-
Slaves節點:接收并執行Master節點發送過來的測試腳本,并將執行結果返回給Master。
為什么要使用docker?
如果要分布式聯動每臺主機,就要求每臺主機都要有JMeter環境(JDK + JMeter),如果利用docker就可以通過docker管理 JMeter環境,簡單的拉取鏡像,啟動容器即可。進一步講,利用k8s、云服務可以無限的擴容JMeter試壓機,理論上多少的并發用戶都可以模擬。
準備工作
- JDK:啟動 JMeter 工具需要
$ brew install openjdk@11
- JMeter: 編寫JMeter腳本
Index of /dist/jmeter/binaries
編寫一個簡單的腳本。
- docker: 通過doker創建容器。
$ docker pull runcare/jmeter-master
$ docker pull runcare/jmeter-slave
- 查看docker鏡像
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
runcare/jmeter-master latest e052a8cd8680 3 years ago 326MB
runcare/jmeter-slave latest 05c7ba96d97d 3 years ago 326MB
請記住 jmeter-master 的鏡像ID e052a8cd8680,后面會用到。
分布式壓測使用
- 啟動 slave 節點。
假設有兩臺主機,可以啟動兩個slave。
$ docker run -it -d --name slave01 runcare/jmeter-slave
$ docker run -it -d --name slave02 runcare/jmeter-slave
- 查看啟動的容器
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b270636a7741 runcare/jmeter-slave "/bin/sh -c 'jmeter-…" 43 seconds ago Up 42 seconds 1099/tcp, 60001/tcp slave01
2584c7fef5f8 runcare/jmeter-slave "/bin/sh -c 'jmeter-…" 52 seconds ago Up 50 seconds 1099/tcp, 60001/tcp slave02
- 發送壓測腳本到 slave
$ result=`date +"%Y%m%d%H%M%S"` && docker run --rm -v /Users/fnngj/zhpro/script:/data e052a8cd8680 jmeter -n -t /data/baidu_script.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.17.0.2,172.17.0.3
參數說明
result=date +"%Y%m%d%H%M%S"`: 指定測試結果的名稱,以當前日期時間命名。
/Users/fnngj/zhpro/script : 壓測腳本的目錄,測試結果也會存放到該目錄下。
baidu_script.jmx : 壓測腳本的名稱,存放于 /Users/fnngj/zhpro/script目錄下。
e052a8cd8680 : jmeter-master 的鏡像ID。
172.17.0.2,172.17.0.3 : 兩臺 slave 的IP 地址。
測試結果
- 執行完的目錄
$ pwd
/Users/fnngj/zhpro/script$ ls
20230707005328 20230707005328.jtl 20230707005328.log baidu_script.jmx
- 查看報告
進入20230707005328 目錄,點擊 index.html 文件,可以看到壓測的結果。
最后
如果你想學習自動化測試,那么下面這套視頻應該會幫到你很多
Python接口自動化測試零基礎入門到精通(2023最新版)