本文在 Non-GUI Mode 下进行,准备好三台有 jdk 环境,linux 操作系统,同一局域网测试机器,运行两台 slave,一台 master 机器,进行分布式测试。
slave-1/slave-2/master 配置好 jmeter 环境(以下操作在 jdk 版本 1.8 环境下进行的)
1.下载 jmeter3.2
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.2.tgz
2.解压
tar xvf apache-jmeter-3.2.tgz
3.添加环境变量
vim /ect/profile
最后一行添加代码:
JMETER=/root/apache-jmeter-3.2
CLASSPATH=$CLASSPATH:$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar
PATH=$PATH:$JMETER/bin
运行以下命令修改立即生效:
source /etc/profile
查看版本是否配置成功:
jmeter -v
4.准备好自己的测试脚本 jmx 文件放在目录/apache-jmeter-3.2/test 下
slave-1 / slave-2 启动 jmeter-server
5.运行 jmeter-server
进到目录/apache-jmeter-3.2/bin:
vim jmeter-server
添加以下代码:(**** 为每台 server 自己的 ip):
RMI_HOST_DEF=-Djava.rmi.server.hostname=****
开启 jmeter-server:
./jmeter-server
运行成功的话会在控制台显示:
Created remote object: UnicastServerRef [liveRef: [endpoint:[***](local),objID:[***, ***]]]
master 机器运行测试脚本
6.修改配置文件 jmeter.properties
进入目录/apache-jmeter-3.2/bin:
vim jmeter.properties
大概 1038 行,添加以下代码:
jmeterengine.nongui.port=0
7.运行脚本,开始测试
测试脚本 test.jmx,在目录/apache-jmeter-3.2/test 下,新建文件夹 report,用来保存结果:
mkdir report
运行以下命令 (*** 为 slave 测试机器的 ip,以逗号,间隔):
jmeter -n -t ws_test.jmx -R ***,*** -l test.jtl -e -o /apache-jmeter-3.2/test/report/
提示以下消息则表示成功开始测试:
Creating summariser <summary>
Created the tree successfully using test.jmx
Configuring remote engine: ***
Configuring remote engine: ***
Starting remote engines
Starting the test @ Sun Mar 04 11:23:31 CST 2018 (1520133811112)
Remote engines have been started
此时 slave 机器控制台会提示:
Starting the test on host *** @ Sun Mar 04 11:23:32 CST 2018 (1520133812700)
测试脚本运行结束 master 控制台会显示结果:
slave 机器控制台会提示:
Finished the test on host *** @ Sun Mar 04 11:25:53 CST 2018 (1520133953286)
至此测试已经完成。
8.查看测试结果报告
master 机器上运行:
python -m SimpleHTTPServer 8000
报告查看网址(*** 为该机器 ip):http://***:8000/report/index.html
9.遇到的坑
在 slave 开启 jmeter-server 时,直接运行./jmeter-server,会提示错误
Server failed to start: java.rmi.RemoteException: Cannot start. *** is a loopback address.
An error occurred: Cannot start. *** is a loopback address.
貌似是因为没有指定主机导致的,所以在 jmeter-server 中指定 RMI_HOST_DEF 写入 hostname 搞定了问题:
vim jmeter-server
添加以下代码:(*** 为每台 server 自己的 ip):
RMI_HOST_DEF=-Djava.rmi.server.hostname=***
在 master 跑测试脚本时,会一直提示如下信息,导致测试一直跑不起来:
Waiting for possible shutdown message on port 4445
解决方法:
进入目录/apache-jmeter-3.2/bin:
vim jmeter.properties
大概 1038 行,添加以下代码:
jmeterengine.nongui.port=0
这个是用于监听 shutdown message 的,如果不需要,可以直接设置为 0 即可。
每台机器要在同一局域网下,最好操作系统保持一致(此次测试在 linux 下实现),不然运行 master 测试脚本有可能会提示拒绝连接的错误。