对于并发量很大的需求,如上万并发量,受到CPU和内存的限制,单机模拟场景是实现不了的,为了让JMeter提供更大的负载能力,须使用它的分布式机制,即多台机器同时产生负载的功能。
特点:
1.真实的性能测试,不存在网络瓶颈问题
2.GUI仅限windows平台,命令行可在linux与windows
3.测试结果保存在本地一台master上
4.使用这台master管理多个Jmeter Engines,也叫做slave
5.测试脚本会被master自动发送到作为负载生成器的slave,但数据文件不会
在进行分布式平台测试的时候,要最好注意以下几点:
1.master也可以同时作slave,但要注意负载适量
2.所有负载生成器slave上安装相同的jmeter与jdk
3.防火墙和杀毒软件要关闭或过滤
4.确保所有master与slave在同一个网段或子网,没有网络延迟
5.master与slave可以是windows或linux,不必全部是同一个OS,但要开放防火墙,否则connect fail
6.脚本使用的数据文件(比如CSV)需要单独传到每个slave,并且脚本中指定的文件路径要能够在每个slave找到该文件,常使用相对路径,较方便
7. 确保jmeter可以访问服务器
8. 确保各个jmeter版本一致,不同版本可能会存在协同问题
一、Jmeter分布式执行原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
一、执行机(slave)配置:
1、slave机上需要安装Jmeter 和 支持当前Jmeter版本的JDK。(有时在运行Jmeter时会提示JDK版本过低)
2、添加环境变量:JMETER_HOME路径为bin目录的上一级目录,这样启动jmeter-server服务时,就只会看到Found ApacheJMeter_core.jar
3、启动bin目录下的:jmeter-server.bat,启动成功如下图。(jmeter 的安装路径不要包含空格,因为jmeter-server.bat不支持含空格的文件夹路径。)
4、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000。
5、多台slave的话,重复1~4步骤就好。
三、调度机(master)配置:
1、脚本:简单的一个访问百度的脚本:
2、打开Jmeter的bin目录下jmeter.properties文件,修改如下配置IP和Port是slaver机的IP以及默认的1099端口,一下两种配置方法都可以。
remote_hosts=172.16.xx.xx,http://172.16.xx.xxx
remote_hosts=172.16.xx.xx:1099,http://172.16.xx.xxx:1099
多台slave之前用 "," 隔开。
修改如下配置,这里端口我自定义为100:
remote_hosts=10.13.223.202:1000,10.13.225.12:1000
我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.
3、打开Jmeter,选择运行,有运程启动、运程全部启动两个选项:
4、选择远程启动-->10.13.225.12:1000
a) master结果,这里我只启动了10.13.225.12:1000这一台slave,所以只有一个结果(线程数和循环次数都是1):
b) slave控制台信息:
5、选择远程启动-->远程全部启动:
a) master结果,全部启动,我配置了2台slave,所以有两次执行结果:
四、自定义端口:
如何自定义slave端口:
1、slave:在slave机的Jmeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为9999:
server_port=9999
server.rmi.localport=9999
2、启动slave机上的jmeter-server.bat端口已经修改为:9999
3、master:修改master机器的jmeter.properties文件:
remote_hosts
4、重启jmeter.bat
五、其它说明:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。
2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的,Filename这里设定一下。
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。
4、如果想要master也分担负载,让master自身也执行测试计划,需要把master 的 IP 和 端口也写到配置文件里,在远程启动前,也要把master的 jmeter-server.bat运行,这样master也能和其他slave一起执行测试计划了。
六、比较
与LoadRunner的异同:
1.都可以实现分布式负载,各有优劣
2.都支持windows和linux下的slave,但master,jmeter跨平台,LR不
3.LR可以指定每个slave生成不同数量的并发用户,jmeter不可
4.jmeter中测试计划使用的数据文件不会随脚本发送到slave,而LR可以通过选择纳入LR管理一起发送到远端slave
欢迎加入 51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ 群: 755431660