书接上文,我们已经可以从容器内执行压力测试命令了,下面是一个简单测试流程的实现。
大致思路是把测试脚本.jmx文件上传到文件服务器,jmeter下载测试脚本并执行,然后把测试结果.jtl和report文件夹上传回文件服务器。
下边是具体实现的步骤:
Nginx文件服务器搭建
Nginx开袋即食,vi /etc/nginx/nginx.conf
,填写如下配置信息即可:
server {
listen 80;
location ^~ /jmetertest/ {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
root /data/jmetertest/;
}
}
在/data/jmetertest/jmetertest
下建立jmx
,jtl
,report
三个目录,访问http://x.x.x.x/jmetertest/
可看到如下文件目录:
上传jmx脚本
本机使用GUI编辑jmx脚本,测试通过后上传文件服务器jmx目录下:
scp check500.jmx root@x.x.x.x:/data/jmetertest/jmetertest/jmx/
登录master容器
可以查询出容器id,然后attach
进入容器:
[root@VM_7_9_centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f89a580916c malfurionpd/jmeter-master "/bin/bash" 3 days ago Up 3 hours r-JMETER-master-1-3f9e7889
[root@VM_7_9_centos ~]# docker attach 6f89a580916c
root@VM_7_9_centos:/# ls
bin boot dev etc home jmeter jmeter-jtl jmeter-plugins jmeter-report jmx jtl lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
也可以一个命令搞定:
[root@VM_7_9_centos ~]# docker attach $(docker ps -a | grep jmeter-master | awk '{ print $1 }')
SSH免密登录
我们的测试命令是在master容器中执行的,测试过程中需要上传很多文件到文件服务器,添加ssh公钥到目标主机,然后使用scp
命令比较方便,具体方式参考这篇。
shell脚本
前边的准备工作就绪后,就是执行命令行进行测试,并把测试报告上传文件服务器了。编写一个shell脚本,传入一个jmx文件名作为参数,vi jmetertest.sh
脚本内容如下:
#!/bin/bash
if [ ! -n "$1" ] ;then
echo 'give me a parameter, ok?'
else
now=`date --date='0 days ago' "+%Y%m%d%H%M%S"`
echo "=====Start JMeter Test $1 on $now"
echo "=====Step1 wget"
cmd1="wget -P /jmeter/apache-jmeter-3.2/bin/ https://devtest.bmkp.cn/jmetertest/jmx/$1"
eval ${cmd1}
echo "=====Step2 makedir in local"
#jmeter-jtl
if [ ! -d "/jmeter-jtl" ]; then
mkdir /jmeter-jtl
fi
#jmeter-jtl/xxx.jmx
if [ ! -d "/jmeter-jtl/$1" ]; then
mkdir "/jmeter-jtl/$1"
fi
#jmeter-report
if [ ! -d "/jmeter-report" ]; then
mkdir /jmeter-report
fi
#jmeter-report/xxx.jmx
if [ ! -d "/jmeter-report/$1" ]; then
mkdir "/jmeter-report/$1"
fi
echo "=====Step3 jmeter"
cmd2="/jmeter/apache-jmeter-3.2/bin/jmeter -n -t /jmeter/apache-jmeter-3.2/bin/$1 -l /jmeter-jtl/$1/$now.jtl -e -o /jmeter-report/$1/$now -Djava.rmi.server.hostname=10.0.7.9 -Dclient.rmi.localport=60000 -R10.0.7.10,10.0.7.12,10.0.7.13,10.0.7.14,10.0.7.15,10.0.7.16,10.0.7.17,10.0.7.23,10.0.7.24,10.0.7.28,10.0.7.32,10.0.7.35,10.0.7.39,10.0.7.4,10.0.7.41,10.0.7.43,10.0.7.45,10.0.7.6,10.0.7.8"
eval ${cmd2}
tip="10.135.147.74"
echo "=====Step4 scp"
#scp jtl
tjtl="/data/jmetertest/jmetertest/jtl"
cmd3="ssh root@${tip} \"[ -d ${tjtl}/$1 ] && echo ok || mkdir -p ${tjtl}/$1\""
eval ${cmd3}
cmd4="scp /jmeter-jtl/$1/$now.jtl root@${tip}:${tjtl}/$1/"
eval ${cmd4}
#scp report
treport="/data/jmetertest/jmetertest/report"
cmd5="ssh root@${tip} \"[ -d ${treport}/$1 ] && echo ok || mkdir -p ${treport}/$1\""
eval ${cmd5}
cmd6="ssh root@${tip} \"[ -d ${treport}/$1/$now ] && echo ok || mkdir -p ${treport}/$1/$now\""
eval ${cmd6}
cmd7="scp -r /jmeter-report/$1/$now root@${tip}:${treport}/$1/"
eval ${cmd7}
echo "=====End JMeter Test $1 on $now"
fi
保存后授权chmod +x jmetertest.sh
。
看看效果
执行脚本,注意传入jmx文件名参数:
root@VM_7_9_centos:/# ./jmetertest.sh check500.jmx
等待执行完毕后,就可以去文件服务器查看结果了。
测试report目录按时间命名,如图:
image.png点击目录可查看测试报告:
image.png
jtl文件也按时间命名:
image.png
OVER.
网友评论