首页 > 代码库 > 【原】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自动化压测脚本
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。