linux大量生成测试文件夹,shell脚本实现linux上批量执行jmeter测试并生成测试报告...

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

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

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

linux大量生成测试文件夹,shell脚本实现linux上批量执行jmeter测试并生成测试报告..._第1张图片先来解释下每个文件吧。(按图片顺序)

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

上面就是完整的脚本,里面有的地方比较冗余,后来进行了修改,希望能对大家有所帮助。

如果大家喜欢的话,给个赞吧。嘻嘻,,,我会继续努力的,希望跟大家共同成长。

你可能感兴趣的:(linux大量生成测试文件夹,shell脚本实现linux上批量执行jmeter测试并生成测试报告...)