Jmeter分布式压测实践

一、测试计划编写

1、添加测试计划
2、添加线程组
3、添加用户自定义变量,定义变量如下

4、添加请求头,绕过cookie校验

5、添加HTTP默认请求

6、添加事务管理器

1)添加HTTP请求

2)添加响应断言

7、添加监听器,Summary Report

二、分布式压测

2.1 Jmeter分布式执行原理

为什么进行分布式部署:
于并发量很大的需求,如上万并发量,受到CPU和内存的限制,单机模拟场景是实现不了的,为了让JMeter提供更大的负载能力,须使用它的分布式机制,即多台机器同时产生负载的功能。

分布式执行的原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave or Agent)。
2、脚本在master的GUI打开,测试计划仅在master上部署即可,执行时,master GUI会把测试计划发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动自己的GUI。每一台jmeter远程服务器都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

注意两点:
1、master和各个slave机器必须使用同一局域网,尽可能减少网络带宽的影响。
2、使用非GUI模式,避免不必要的cpu、内存损耗。

2.2 Jmeter调度机和执行机的配置

1、安装jmeter、jdk
2、添加环境变量

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、重要说明:防火墙处于关闭状态,执行机和主机可以ping通
4、ip地址准备:

执行机1:192.xx.xx.245
执行机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 改成执行机和调度机的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、本机和执行机都需要开启:jmeter-servet.bat
2、准备脚本
3、run可以看到配置的主机和执行机

4、运行:remote start all

四、压测结果

1、接口说明
压测的接口:客户查询接口
http://ip:port/admin-api/crc/customer/page get请求
机器的性能:处理器i5,RAM 32GB,64位,

3台机器,线程循环10次
2、过程记录

3、图表展示
将以上数据绘制成折线图,横坐标均为线程数:


posted @ 2024-01-16 18:07  hqq的进阶日记  阅读(71)  评论(0编辑  收藏  举报