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:端口

方法三:

  1. # 方法三只写-r意思就是配置文件中写了多少台子机器,就运行多少台

  2. jmeter -n -t 脚本路径.jmx -l report.jtl -r

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值