一、配置Linux jdk环境:
1. 将下载好的jdk放到Linux /home/wwwroot/ichangtou/server 目录下(下载的时候注意是32还是64位)。比如我的Linux系统是64位,下载64位的jdk
2.解压缩,解压缩命令 tar -zxvf jdk-8u191-linux-64.tar.gz
3. 配置jdk环境变量,编辑 /etc/profile,在末尾新增如下配置
export JAVA_HOME=/home/wwwroot/ichangtou/server/jdk1.8.0_161
export CLASSPATH=$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
4、让设置的配置立即生效,输入命令:source /etc/profile。然后输入 java -version 测试下
二、安装配置jmeter:
1、下载jmeter:http://jmeter.apache.org/download_jmeter.cgi linux下下载.tgz包
上传至linux服务器:rz命令
解压tgz包:tar zxvf apache-jmeter-5.1.1.tgz -C ./
2、配置jmeter环境变量:
export JMETER=/opt/apache-jmeter-5.1.1
export CLASSPATH=$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER/bin/:$PATH
3、让设置的配置立即生效,输入命令:source /etc/profile
4、查看是否安装成功:jmeter –v 或者 $jmeter_home/bin/jmeter.sh –v
5、jmeter需要添加插件的,按步骤 1、2 操作,然后覆盖到 jmeter 根目录即可
三、jmeter 命令使用
/opt/scripts
将脚本ichangtou.jmx和参数化文件放在scripts文件夹下面,新建一个Report文件夹,运行如下命令,脚本叫可以跑起来了
jmeter -n -t ichangtou.jmx -l Result/report.jtl
四、分布式压测方式
原理图:
使用3台linux测试机部署jmeter,定义好哪一台服务器作为控制机Master和负载机slave
3台linux测试机需安装相同版本的jdk和jmeter,参数化文件在每一台服务器上都需要放置在同一路径,脚本放在控制机
1、在控制机上修改bin/jmeter.properties,添加从机的IP及端口 1099是默认的rmi通信端口并修改自己的绑定端口,如下
remote_hosts=172.16.43.6:1099,172.16.43.7:1099
2、在控制机和负载机上修改:server.rmi.ssl.disable=true
3、在负载机上修改:
remote_hosts=172.16.43.6
#server_port=1099
#server.rmi.localport=1099
2、开启负载机上的server服务:在bin目录下运行jmeter-server
3、在控制机执行分布式命令
cd /opt/apache-jmeter-5.1.1/bin
jmeter -n -t /opt/scripts/ichangtou.jmx -l /opt/scripts/Result/report.jtl -R 172.16.43.7:1099,172.16.43.6:1099
jmeter -n -t goods.jmx -l 100.jtl 执行脚本 n : 非GUI 模式执行JMeter t :执行测试文件所在位置及文件名 l : 生成的测试结果文件,jtl文件格式 rz上传 ,sz下载 vi goods1.jxm
参数说明 :
-n 告诉jmeter使用nogui模式运行测试
-t 执行的测试脚本名
-R 后面跟随负载机的ip地址 ,注意用逗号隔开
-l 后面跟着测试结果记录的路径与文件名,主意这个文件jmeter不会自己创建,请预先创建好,
注:若有host同样也需要修改从机的host文件,否则会出现error
ip地址~空格~hostname
①删除redis数据:root下执行:sh del_redis_pro.sh user_token*
#!/bin/bash
redis-cli -c -h 172.16.18.45 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.45 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}
redis-cli -c -h 172.16.18.45 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.45 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}
redis-cli -c -h 172.16.18.46 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.46 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}
redis-cli -c -h 172.16.18.46 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.46 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}
redis-cli -c -h 172.16.18.47 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.47 -p 6380 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}
redis-cli -c -h 172.16.18.47 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null keys $1 | xargs -i redis-cli -h 172.16.18.47 -p 6381 -a "SutcS7RUDMTq9zkC" 2>/dev/null del {}echo "success"
②重新上传token:scripts下执行:sh set_token.sh
#!/bin/bash
cat SetToken.txt | redis-cli -c -h 172.16.18.45 -p 6380 -a "SutcS7RUDMTq9zkC"
cat SetToken.txt | redis-cli -c -h 172.16.18.46 -p 6380 -a "SutcS7RUDMTq9zkC"
cat SetToken.txt | redis-cli -c -h 172.16.18.47 -p 6380 -a "SutcS7RUDMTq9zkC"
cat SetToken.txt | redis-cli -c -h 172.16.18.45 -p 6381 -a "SutcS7RUDMTq9zkC"
cat SetToken.txt | redis-cli -c -h 172.16.18.46 -p 6381 -a "SutcS7RUDMTq9zkC"
cat SetToken.txt | redis-cli -c -h 172.16.18.47 -p 6381 -a "SutcS7RUDMTq9zkC"
③启动脚本:scripts下执行:sh start.sh
压力机启动脚本:
【
#!/bin/bash
# 获取当前时间并设置为文件夹名称
file_name=`date +%Y%m%d%H%M`
cd /opt/apache-jmeter-5.1.1/bin
remote_hosts=172.16.43.7:1099,172.16.43.6:1099local(){
# 本机启动Jmeter并输出报告
jmeter -n -t /opt/scripts/ichangtou.jmx -l /opt/scripts/Result/report_${file_name}/report.jtl -e -o /opt/scripts/Result/report_${file_name}
}cluster(){
# 远程启动并生成报告
jmeter -n -t /opt/scripts/ichangtou.jmx -l /opt/scripts/Result/${file_name}/report.jtl -R 172.16.43.7:1099,172.16.43.6:1099 -e -o /opt/scripts/Result/${file_name}
# jmeter -n -t /opt/scripts/ichangtou.jmx -l /opt/scripts/Result/${file_name}/report.jtl -R ${remmote_hosts} -e -o /opt/scripts/Result/report_${file_name}
}#local
cluster】
踩坑:
1、服务器上脚本需要加cookie管理器,不然就会生成很多个接口
2、负载机csv文件替换一定要同步压力机文件
3、若是报这样的错:The JVM should have exited but did not.修改jmeter.properties 中的jmeterengine.force.system.exit=true。
4、理论上负载机csv文件路径和压力机一致,如果报错,将负载机csv文件放在bin目录下面