shell脚本实现linux上批量执行jmeter测试并生成测试报告

本人已经很久没有更新博客了,这里就记录下前段时间写的一个shell脚本。这个脚本主要是用来在linux上批量执行jmeter测试的,初衷也是为了省去同事重复执行命令的无谓劳作。下面就一起来看看脚本的内容吧。希望shell方面的大神能给出指导意见。

首先,脚本的内容就是模仿人工操作的一个过程,所以理解起来还是比较简单的。

先来看下整个目录结构吧。如下图所示:

先来解释下每个文件吧。(按图片顺序)

htmlReport:该文件夹用于存放生成的html报告,可脚本执行时创建(非必须)

testJMX:该文件用于存放测试用例(必须)

testJTL:该文件用于存放生成的.jtl报告文件,可脚本执行时创建(非必须)

testLog:该文件用于存放执行测试用例的日志文件,文件内容为自定义,可以脚本执行时创建(非必须)

config.ini:该文件用于配置jmeter安装路径,指定JmeterHome(必须)

IPAddress.txt:该文件用于jmeter分布式测试时,配置用于执行测试的linux的ip地址(必须,但内容可以为空)

run_new.sh:该文件是执行测试的入口,即脚本文件(必须)

testList.txt:该文件用于配置本次测试需要执行的测试用例(必须)

好了,文件目录已经介绍完了,心里大概有个框框了。下面就直接来看脚本内容吧。

#! /bin/bash
#进入当前执行文件目录
cd `dirname $0`
#获取当前路径
BASE_PATH=`pwd`
#使用config.ini配置文件
source $BASE_PATH/config.ini

#定义各种文件名
JTL=$BASE_PATH/"testJTL"
JTL_FILE=`date "+%Y%m%d%H%M%S"`
JMX=$BASE_PATH/"testJMX"
HTML=$BASE_PATH/"htmlReport"
HTML_FILE=`date "+%Y%m%d%H%M%S"`
LOG=$BASE_PATH/"testLog"
list=$BASE_PATH/'testList.txt'
testLog=`date "+%Y%m%d%H%M%S"`'.log'
TARFILE=$BASE_PATH/"REPORTFILE"
IPAddress=$BASE_PATH/"IPAddress.txt"

#判断文件或文件夹是否存在,不存在则创建
if [ ! -d $JTL ];then
	mkdir $JTL
fi

if [ ! -d $JMX ];then
	mkdir $JMX
fi

if [ ! -d $HTML ];then
	mkdir $HTML
fi

if [ ! -d $LOG ];then
	mkdir $LOG
fi

if [ ! -f $LOG/$testLog ];then
	touch $LOG/$testLog
fi

if [ ! -d $JTL/$JTL_FILE ];then
	mkdir $JTL/$JTL_FILE
fi

if [ ! -d $HTML/$HTML_FILE ];then
	mkdir $HTML/$HTML_FILE
fi

# login client
# start jmeter-server
#获取远程连接的ip地址
IPList=(`cat $IPAddress`)

RemoteIP=""
testFile="StartFile.log"

#判断ip地址是否大于0,如果大于,则一次登录
#启动该ip机器上的jmeter-server,关闭防火墙
#返回操作结果并退出
if [ ${#IPList[@]} -gt 0 ];then
	for ip in ${IPList[@]}
	do
	{
		ssh root@$ip << EOF
		#ifconfig
		echo "Login $ip"
		# check firewall
		systemctl status firewalld > "StartFile.log"
		grep -q "active (running)" $testFile
		if [ $? -eq 0 ];then
			systemctl stop firewalld
			if [ $? -eq 0 ];then
				echo "Stop firewall OK."
			else
				echo "Stop firewall error."
			fi
		else
			echo "Firewall has been stopped."
		fi
		# start jmeter-server
		#echo $JMeterHome
		cd $JMeterHome
		if [ ! -x jmeter-server ]; then
			chmod 755 jmeter-server
		fi
		nohup ./jmeter-server -Djava.rmi.server.hostname=$ip >> jmeter-server-start.log 2>&1 &
		#echo "sleep time 5"
		sleep 5
		jobs > "StartFile.log"
		grep -q "Running" $testFile
		if [ $? -eq 0 ];then
			echo "Start jmeter-server OK."
		else
			echo "Jmeter-server start error."
		fi
		rm -f "StartFile.log"
		echo " Now exit from $ip"
		exit
EOF
	RemoteIP=${RemoteIP}${ip}","
	}&
	done
	wait
fi

#创建一个函数用于拼接名称
#该函数有$1和$2两个参数
function createName(){
	name=`echo $1 | grep -v -E "^#.*$|^$" | grep -o -E "^\w+"`$2
	echo $name
}

#开始向log文件输入内容(可自定义)
echo "" >$LOG/$testLog

#用于计数,统计共执行了多少个测试用例
total=0
#for循环,依次执行testList文件中的测试用例
for i in `cat $list`
do
	#去掉注释行
        echo "$i" | grep -q -E "^#|^\s"
	if [ $? -eq 0 ];then
		continue
	fi
    echo "(`date "+%Y-%m-%d %H:%M:%S"` )Run "$i >> $LOG/$testLog
	
        #调用createName函数拼接测试报告名称
	jtlname=$(createName $i ".jtl")
	reportname=$(createName $i "_report") 
	
        #去除\r符
	i=`echo $i | sed 's/\r//g'`
        #如果RemoteIP为空,则不进行远程分布式测试,只在本机执行
	if [ -z "$RemoteIP" ];then
		$JMeterHome/jmeter -n -t $JMX/$i -l $JTL/$JTL_FILE/$jtlname -e -o $HTML/$HTML_FILE/$reportname
	fi
        #如果RemoteIP不为空,则进行远程分布式测试
	if [ -n "$RemoteIP" ];then
		$JMeterHome/jmeter -n -t $JMX/$i -R ${RemoteIP%?} -l $JTL/$JTL_FILE/$jtlname -e -o $HTML/$HTML_FILE/$reportname
	fi
        #计数
	let total=$total+1
done
sleep 5
echo "--------------------------------------" >>$LOG/$testLog
echo "" >>$LOG/$testLog
echo "TOTAL: "$total >>$LOG/$testLog

if [ $? -eq 0 ];then
	sleep 5
	if [ ! -d $TARFILE ];then
		mkdir $TARFILE
	fi
        将测试报告和log文件移到同一个文件夹
	mv $LOG/$testLog $TARFILE
	mv $JTL/$JTL_FILE $TARFILE
	mv $HTML/$HTML_FILE $TARFILE
	
        #打包文件夹
	tar -cf $BASE_PATH/ReportFile.tar -C $BASE_PATH "REPORTFILE"
	
        #打包好后下载文件到windows本地
	if [ $? -eq 0 ];then
		sz $BASE_PATH/ReportFile.tar
	fi
        #删掉不用的文件
	if [ $? -eq 0 ];then
		rm -f *.tar
		rm -f *.log
		rm -fr $TARFILE
	fi
fi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值