对于并发量很大的需求,如上万并发量,受到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