首页 > 代码库 > 【原】shell编写一个简单的jmeter自动化压测脚本

【原】shell编写一个简单的jmeter自动化压测脚本

在公司做压力测试也挺长时间了,每次测试前环境数据准备都需要话费较长时间,所以一直在考虑能不能将整个过程实现自动化进行,于是就抽空写了一个自动化脚本,当然这个脚本目前功能十分简陋,代码也不完善,很有很多需要改的地方,后续再优化。文中如有错误或者不妥之处,还望指教。

一、设计思路

1、初始化数据库(导入用户,清除数据等)

2、初始化缓存(使用了redis缓存优化系统)

3、执行压力测试

 

二、目录结构

技术分享

目录解读:

apache-jmeter-3.0  为jmeter程序目录

asserts.log      断言日志

auto_jmeter.sh     脚本文件(启动这个项目就是执行它)

jmeter.log      jmeter启动日志

 

三、代码如下(按照惯例,所有涉及公司的代码都有修改)

#!/bin/bash
set -e
LC_ALL=C
LANG=C
unset TZ
file_path="./"
host="192.168.0.32"
username="test"
password="test.123"
dbname="test"
jmeter_path="./apache-jmeter-3.0/bin/jmeter.sh"
jmx_path="./apache-jmeter-3.0/jmxs/termplan_dq.jmx"
jtl_path="./apache-jmeter-3.0/jtls/`date +%Y%m%d-%H%M`.jtl"
sql_path="./sqlFiles/"
#now=`date +date +%Y%m%d-%H%M`

###############33######
####数据库初始化
###############33######
function init_data(){
        echo "===========开始初始化相关数据============="
        mysql -h${host} --default-character-set=utf8 -u${username} -p${password} ${dbname} -e"
        DELETE FROM t_user WHERE id > 50000;
        DELETE FROM t_person WHERE id > 50000;
        SELECT count(*) AS 压测前预约总数 FROM t_test_table;
        "

        cd ${sql_path}
        sql_name=`ls`
        for file_name in ${sql_name[@]}
        do
                if [ -f "$file_name" ];then
                        #command="source $file_name"
                        mysql -h${host} --default-character-set=utf8 -u${username} -p${password} ${dbname} -e "source ${file_name}"
                else
                        echo -e "\033[31;31m SQL文件不存在!!!\033[0m"
                fi
        done
        cd ..

        mysql -h${host} --default-character-set=utf8 -u${username} -p${password} ${dbname} -e"
        SELECT count(*) AS 新增用户数 FROM t_user WHERE id > 50000;
        "
        echo "==========已完成初始化相关数据============"
}
###############33######
####缓存初始化
###############33######
function init_cache(){
        echo "=============开始初始化缓存==============="
        echo "==============初始化(kiwi)================"
        curl "http://127.0.0.1:10000/test/test.action"
        echo -e "\n==========初始化冻结缓存(kiwi)============"
        curl "http://127.0.0.1:10000/test/test/zen.action"
        echo -e "\n============已完成初始化缓存=============="
}
###############33######
####执行jmeter脚本
###############33######
function auto_jmeter(){
        sh ${jmeter_path} -n -t ${jmx_path} -l ${jtl_path}
}
###############33######
####查询数据(数据太多无作用,因为缓存到数据库需要很长时间)
###############33######
function select_data(){
        echo "============开始查询相关数据=============="
        mysql -h${host} --default-character-set=utf8 -u${username} -p${password} ${dbname} -e"
        select count(*) as 压测后预约总数  from t_test_table;
        quit
        "
        echo "============相关数据查询完毕=============="
        echo -e "\033[36;36m============压力测试执行完毕==============\033[0m"
}
#######################
#######################
init_data
init_cache
auto_jmeter
sleep 10
select_data

 

四、执行结果如下图

技术分享

 

五、遗留的问题

1、jmeter压力上不去,尽管加了1000个线程,但实际并发20左右,这个在之前发的文档里面有数据呈现。

2、支持输出html报告,需要实现,压测报告更加直观。如何输出正确的测试报告非常重要。

等等

上述问题解决会继续更新

 

【注】欢迎探讨,欢迎转载,但转载请注明出处。

【原】shell编写一个简单的jmeter自动化压测脚本