在公司做压力测试也挺长时间了,每次测试前环境数据准备都需要话费较长时间,所以一直在考虑能不能将整个过程实现自动化进行,于是就抽空写了一个自动化脚本,当然这个脚本目前功能十分简陋,代码也不完善,很有很多需要改的地方,后续再优化。文中如有错误或者不妥之处,还望指教。
一、设计思路
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报告,需要实现,压测报告更加直观。如何输出正确的测试报告非常重要。
等等
上述问题解决会继续更新
【注】欢迎探讨,欢迎转载,但转载请注明出处。(2017-06-30)