Jmeter分布式壓測實踐
一、測試計劃編寫
1、添加測試計劃
2、添加線程組
3、添加用戶自定義變量,定義變量如下

4、添加請求頭,繞過cookie校驗

5、添加HTTP默認請求

6、添加事務管理器

1)添加HTTP請求

2)添加響應斷言

7、添加監(jiān)聽器,Summary Report
二、分布式壓測
2.1 Jmeter分布式執(zhí)行原理
為什么進行分布式部署:
于并發(fā)量很大的需求,如上萬并發(fā)量,受到CPU和內存的限制,單機模擬場景是實現(xiàn)不了的,為了讓JMeter提供更大的負載能力,須使用它的分布式機制,即多臺機器同時產(chǎn)生負載的功能。
分布式執(zhí)行的原理:
1、Jmeter分布式測試時,選擇其中一臺作為調度機(master),其它機器做為執(zhí)行機(slave or Agent)。
2、腳本在master的GUI打開,測試計劃僅在master上部署即可,執(zhí)行時,master GUI會把測試計劃發(fā)送到每臺slave上,slave 拿到腳本后就開始執(zhí)行,slave執(zhí)行時不需要啟動自己的GUI。每一臺jmeter遠程服務器都執(zhí)行相同的測試計劃,jmeter不會在執(zhí)行期間做負載均衡,每一臺服務器都會完整地運行測試計劃。
3、執(zhí)行完成后,slave會把結果回傳給master,master會收集所有slave的信息并匯總。
注意兩點:
1、master和各個slave機器必須使用同一局域網(wǎng),盡可能減少網(wǎng)絡帶寬的影響。
2、使用非GUI模式,避免不必要的cpu、內存損耗。
2.2 Jmeter調度機和執(zhí)行機的配置
1、安裝jmeter、jdk
2、添加環(huán)境變量
JMETER_HOME 變量:
D:\softOfPB\jmeter\apache-jmeter-5.6.2\apache-jmeter-5.6.2
classpath后追加:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JMETER_HOME%\lib;
Path變量:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%MAVEN_HOME%\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%SYSTEMROOT%\System32\OpenSSH;C:\Program Files\dotnet;D:\softOfPB;D:\git\Git\bin;D:\git\Git\cmd;C:\Users\22441\AppData\Local\Programs\Python\Python36;C:\Users\22441\AppData\Local\Programs\Python\Python36\Scripts;D:\driver;%CATALINA_HOME%\bin;%MYSQL_HOME%\bin;C:\Users\22441\Downloads\allure-commandline-2.13.2\allure-2.13.2\bin;D:\softOfPB\Xshell 7;%JMETER_HOME%\bin;
3、重要說明:防火墻處于關閉狀態(tài),執(zhí)行機和主機可以ping通
4、ip地址準備:
執(zhí)行機1:192.xx.xx.245
執(zhí)行機2:192.xx.xx.243
主機:192.xx.xx.242
2.3 slave從機的配置
2.3.1 jmeter的bin目錄下的jmeter.properties 配置如下
1)ip和端口
# Remote Hosts - comma delimited 改成從機的ip
remote_hosts=127.0.0.1:1099
#remote_hosts=localhost:1099,localhost:2010
RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
2)ssl
Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
3)設置報告格式
legitimate values: xml, csv, db. Only xml and csv are currently supported.
jmeter.save.saveservice.output_format=csv
4)設置編碼
The encoding to be used if none is provided (default UTF-8 since JMeter 5.6.1)
sampleresult.default.encoding=UTF-8
2.3.2 配置jmeter-server文件
RMI_HOST_DEF=-Djava.rmi.server.hostname=為slave的本機ip
2.4 master調度機的配置
2.4.1 jmeter的bin目錄下的jmeter.properties
1)ip和端口
# Remote Hosts - comma delimited 改成執(zhí)行機和調度機的ip
remote_hosts=192.xx.xx.242:1099,192.xx.xx.245:1099,192.xx.xx.243:1099
#remote_hosts=localhost:1099,localhost:2010
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
2)ssl
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
3)設置報告格式
# legitimate values: xml, csv, db. Only xml and csv are currently supported.
jmeter.save.saveservice.output_format=csv
4)設置編碼
# The encoding to be used if none is provided (default UTF-8 since JMeter 5.6.1)
sampleresult.default.encoding=UTF-8
5)master才需要配置的mode
# mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender
mode=Standard
2.4.2 配置jmeter的bin目錄下的jmeter-server
# One way to fix this is to define RMI_HOST_DEF below 主機ip
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.xx.xx.242
${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"
三、分布式運行驗證
1、本機和執(zhí)行機都需要開啟:jmeter-servet.bat
2、準備腳本
3、run可以看到配置的主機和執(zhí)行機

4、運行:remote start all



四、壓測結果
1、接口說明
壓測的接口:客戶查詢接口
http://ip:port/admin-api/crc/customer/page get請求
機器的性能:處理器i5,RAM 32GB,64位,
3臺機器,線程循環(huán)10次:
2、過程記錄

3、圖表展示
將以上數(shù)據(jù)繪制成折線圖,橫坐標均為線程數(shù):



浙公網(wǎng)安備 33010602011771號