Jmeter分布式测试
单台机器运行500个线程就基本到极限了,所以很多时候我们需要用到分布式执行方式。
1. 介绍
Jmeter的分布式执行方式,分为一台调度机和多台执行机。其中调度机保存测试脚本,远程启动时分发给所有执行机。而执行机执行的过程中会把请求结果实时传回给调度机。以达到分布式测试的目的。
以下图例中,以a机器作为调度机,a、b、c机器作为执行机进行测试。(机器紧张的情况下,a也可以充当执行机)
PS: 传输过程中会产生一定的损耗,所以不建议调度机参与执行。
2. 准备工作
2.1 执行机查到出ip地址
- 查询本机ip地址
windows在cmd执行ipconfig。Linux在终端执行ifconfig可以查到本机的ip地址。
PS: 因为我这是A类地址,所以是10开头的,一般是C类地址192.168.x.x。
2.2 调度机修改配置文件
- 进入调度机上Jmeter程序路径,打开/bin/jmeter.properties 文件。
- 找到remote_hosts这一行,填入所有执行机ip地址。(来自2.1 执行机查到出ip地址)
3. 执行过程
3.1 执行机启动服务端
- 在每一台执行机上,进入Jmeter程序路径,启动\bin\jmeter-server.bat 文件。
- 启动后是这样子的,这个终端不能关闭。红框中会显示本机IP地址。端口号在Jmeter4.0后是自动分配的。
3.2 调度机远程启动所有执行机
- 在调度机上,运行Jmeter GUI界面。可以在运行-远程启动菜单看到配置文件中设定的执行机列表。
- 我点了运行-远程全部启动,2个执行机各执行了一遍。
执行过程中,调度机分发了.jmx脚本给了2台执行机,2台执行机执行过程中把执行结果传回给了调度机。
- 如果远程执行成功的话,执行机上的jmeter-server.bat执行框会有内容更新
4. 命令行进行远程启动
-
普通的命令行启动是这样的
jmeter.bat -n -t 线程组.jmx -l test.jtl -
带上生成报告是这样的
jmeter.bat -n -t 线程组.jmx -l test.jtl -e -o Report -
远程启动所有执行机,只需要加个 -r 参数即可
jmeter.bat -n -t 线程组.jmx -r -l test.jtl
-
执行完成后报告也是所有执行机的全部测试结果
5. 可能遇到的问题
5.1 启动jmeter-server.bat报错
- Windows平台 执行机如果运行 jmeter-server.bat 遇到以下错误 java.io.FileNotFoundException: rmi_keystore.jks
- 进入执行机上Jmeter程序路径,打开\bin\jmeter.properties 文件。
找到#server.rmi.ssl.disable=false 这一行,改成true,记得把#去掉。
- 调度机也需要修改为#server.rmi.ssl.disable=true,否则远程启动时会报相同错误。
5.2 远程启动时报错
- 可能是你的调度机上执行的测试脚本中,含有执行机上没有的插件内容。
譬如这个情况是调度机上有"bzm - Concurrency Thread Group"线程组,但执行机上没有这个插件。