西安網(wǎng)址開發(fā) 網(wǎng)站制作一個網(wǎng)站推廣
為什么需要分布式?
在工作中經(jīng)常需要對一些關(guān)鍵接口做高QPS的壓測,JMeter是由Java 語言開發(fā),沒創(chuàng)建一個線程(虛擬用戶),JVM默認(rèn)會為每個線程分配1M的堆棧內(nèi)存空間。受限于單臺試壓機(jī)的配置很難實(shí)現(xiàn)太高的并發(fā)。所以,通過JMeter實(shí)現(xiàn)分布式,可以整合多臺主機(jī)的硬件資源,實(shí)現(xiàn)同時對被測試接口進(jìn)行壓力測試。
Jmeter分布式測試環(huán)境中有兩個角色:Master 和 Slaves
-
Master節(jié)點(diǎn):向參與的Slaves節(jié)點(diǎn)發(fā)送測試腳本,并聚合Agent節(jié)點(diǎn)的執(zhí)行結(jié)果。
-
Slaves節(jié)點(diǎn):接收并執(zhí)行Master節(jié)點(diǎn)發(fā)送過來的測試腳本,并將執(zhí)行結(jié)果返回給Master。
為什么要使用docker?
如果要分布式聯(lián)動每臺主機(jī),就要求每臺主機(jī)都要有JMeter環(huán)境(JDK + JMeter),如果利用docker就可以通過docker管理 JMeter環(huán)境,簡單的拉取鏡像,啟動容器即可。進(jìn)一步講,利用k8s、云服務(wù)可以無限的擴(kuò)容JMeter試壓機(jī),理論上多少的并發(fā)用戶都可以模擬。
準(zhǔn)備工作
- JDK:啟動 JMeter 工具需要
$ brew install openjdk@11
- JMeter: 編寫JMeter腳本
Index of /dist/jmeter/binaries
編寫一個簡單的腳本。
- docker: 通過doker創(chuàng)建容器。
$ 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 節(jié)點(diǎn)。
假設(shè)有兩臺主機(jī),可以啟動兩個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
- 發(fā)送壓測腳本到 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
參數(shù)說明
result=date +"%Y%m%d%H%M%S"`: 指定測試結(jié)果的名稱,以當(dāng)前日期時間命名。
/Users/fnngj/zhpro/script : 壓測腳本的目錄,測試結(jié)果也會存放到該目錄下。
baidu_script.jmx : 壓測腳本的名稱,存放于 /Users/fnngj/zhpro/script目錄下。
e052a8cd8680 : jmeter-master 的鏡像ID。
172.17.0.2,172.17.0.3 : 兩臺 slave 的IP 地址。
測試結(jié)果
- 執(zhí)行完的目錄
$ pwd
/Users/fnngj/zhpro/script$ ls
20230707005328 20230707005328.jtl 20230707005328.log baidu_script.jmx
- 查看報告
進(jìn)入20230707005328 目錄,點(diǎn)擊 index.html 文件,可以看到壓測的結(jié)果。
最后
如果你想學(xué)習(xí)自動化測試,那么下面這套視頻應(yīng)該會幫到你很多
Python接口自動化測試零基礎(chǔ)入門到精通(2023最新版)