全网最详细,Jmeter分布式性能测试,资深测试老鸟总结......


前言

分布式性能测试

单机能产生的虚拟用户数有限,当需要进行高并发场景时,一台机器的能力有限。因此就会用到分布式,由多台电脑一起产生虚拟用户并向服务器发起请求,实现高并发场景。

分布式的原理:
由一台主控机器控制多台子机器,主控机器会分发指令给子机器,子机器收到指令后向服务器发起请求,服务器收到请求后返回给子机器,子机器再返回给主控机器。

记住,主机器发的是指令,并不是脚本!脚本根本不需要上传到子机器上。
主控机器本身也可产生压力,也可不产生。

前提条件

1、主机和子机器jmeter版本要一致
2、jdk要主版本一致
3、jmeter脚本中csv文件要一致(特别是文件路径)
4、jmeter的插件要一致
5、同一局域网,防火墙可以开放端口

保持一致性的方法:直接压缩本地的jmeter包。然后上传到子机器并解压
另外,进行分布式的时候如果使用WiFi连接,有可能会收不到数据,数据会在网络上阻塞。

操作步骤

配置子机器
1、上传jmeter包并解压

unzip apache-jmeter-5.2.1.zip

2、由于上传上来的文件只有读写权限,没有执行权限,因此要加上执行权限。

chmod +x -R 文件名

3、修改子机器的配置文件(不管子机器是Windows、linux、mac,修改方式都是一样的)

# 编辑配置文件
vim jmeter.properties

修改server_port,定义子机器的端口
server_port=XXXX

#2、修改认证端口server.rmi.port,要与server_port一致
server.rmi.port=XXXX

#3、修改server.rmi.ssl.disable为true,为true就是禁用SSL证书,为false为启用SSL证书
server.rmi.ssl.disable=true

server.rmi.port是认证端口,指的是HTTP/HTTPS这种传输协议的认证,局域网其实可以不设置,但如果要设置的话就还需要设置证书等操作。

4、启动jmeter服务

# 启动子机器
# hostname是子机器的名称,一般是输入IP,主机器将通过hostname找到这台子机
./jmeter-server -Djava.rmi.server.hostname=192.168.83.130

这里可以留意一下输出信息

Aug 16, 2022 6:05:44 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.83.130:43757](local),objID:[-1c3f0f73:173f6bb6b8c:-7fff, 3333993770953996796]]]  

在配置文件中虽然已经设置了server_port,这是固定的端口,一般使用这个端口就能找到子机,但在输出信息里面其他它也生成了一个动态端口,endpoint:192.168.83.130:43757 这里面的43757是动态产生的端口,每次启动都会变化,不过一般不用这个端口。

拓展知识

Windows、mac电脑也能做子机器,子机器对系统没要求执行方式也是一样的,只不过Windows下执行的是.bat文件
jmeter-server.bat -Djava.rmi.server.hostname=192.168.83.130

另外如果出现证书错误的提示,可以执行bin/create-rmi-keystore.sh,它可以生成一个证书

主机器配置

由于主机器是Windows,因此以下都是Windows上的操作
1、也是编辑bin\jmeter.properties

# 1、修改remote_hosts,填入子机器的IP及端口,多个时用","分隔
remote_hosts=XXX.XXX.XXX.XXX:XXXX


# 2、修改server.rmi.ssl.disable为true,禁用证书
server.rmi.ssl.disable=true

# 3、修改mode=Standard,使用标准模式,开启之后,才能实时看到助攻机器的数据
mode=Standard

# 备注
#remote_hosts可以配置多个,用“,”分隔.如:192.168.0.1:1234,192.168.0.2:1234
#如果主机器也要产生压力,那么remote_hosts可以加上127.0.0.1:XXXX

2、运行jmeter, 菜单栏的运行->远程启动

请添加图片描述

拓展知识

#1、如果启动远程机器时出现timeout,先看看子机器的jmeter服务有没有启动,然后再看看防火墙有没有开放端口
#防火墙开放端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent 

#开放之后要重新加载防火墙
firewall-cmd --reload

#或者重启防火墙
systemctl restart firewalld.service

#查看端口的开放状态
firewall-cmd --query-port=8080/tcp

#查看防火墙所有开放的端口
firewall-cmd --list-port

#不推荐使用的方法,停掉防火墙
systemctl stop firewalld

#2、jmeter脚本并不需要传到子机器中,主机器是会自动分发脚本给子机器
#3、主机器要产生压力,也一样要先启动java服务,执行方法与子机器启动服务是一样的

无界面执行分布式

方法一:

jmeter -n -t 脚本路径.jmx -l report.jtl -H 分布式机器IP -P 分布式机器端口

方法二:

jmeter -n -t 脚本路径.jmx -l report.jtl -r 分布式机器IP:端口,分布式机器2IP:端口

方法三:

# 方法三只写-r意思就是配置文件中写了多少台子机器,就运行多少台
jmeter -n -t 脚本路径.jmx -l report.jtl -r 
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

在这里插入图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

机会,需要我们去寻找。让我们鼓起勇气,运用智慧,把握我们生命的每一分钟,创造出一个更加精彩的人生。

提出问题远比解决问题难,因为解决问题是技术性的,而提出问题则是革命性的。我们身边并不缺少财富,而是缺少发现财富的眼光!

经验固然重要,但观念的正确与否起决定作用。经验只能做好现成的东西,观念则决定长远的方向。思维观念高于工作经验。

猜你喜欢

转载自blog.csdn.net/shuang_waiwai/article/details/129753722