Jmeter - 自动化压测脚本
【问:为什么要自动化压测】
- 目前使用Jmeter压测,都是手动逐步加压
- 需要手动修改并发数,烦
- 需要等待完成,费时
【实现思路】
- 制定策略,让脚本逐步施压 --> 并发数??
- 生成对应并发数的jmx文件
- Jmeter静默压测
- 使用shell 控制逻辑
#!/usr/bin/env bash export jmx_template="testScript20220621" export suffix=".jmx" export jmx_template_filename="${jmx_template}${suffix}" export os_type=`uname` # 需要在系统变量中定义jmeter根目录的位置,如下 # export JMETER_HOME="/your jmeter path/" # 清空nohup.out cat /dev/null > nohup.out # 强制杀掉JMeter进程 killJMeter() { pid=`ps -ef|grep jmeter|grep java|grep ${jmx_filename}|awk '{print $2}'` echo "jmeter Id list :$pid" if [[ "$pid" = "" ]] then echo "no jmeter pid alive" else kill -9 $pid fi } # 压测并发数列表 thread_number_array=(5 10 20) for num in "${thread_number_array[@]}" do # 生成对应压测线程的jmx文件 export jmx_filename="${jmx_template}_${num}${suffix}" export jtl_filename="test_${num}.jtl" rm -f ${jmx_filename} ${jtl_filename} cp ${jmx_template_filename} ${jmx_filename} echo "生成jmx压测脚本 ${jmx_filename}" if [[ "${os_type}" == "Darwin" ]]; then sed -i "" "s/thread_num/${num}/g" ${jmx_filename} else # 对全局匹配上的所有字符串进行替换 sed -i "s/thread_num/${num}/g" ${jmx_filename} fi # JMeter 静默压测 nohup ${JMETER_HOME}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename}& sleep 10 killJMeter rm -f ${jmx_filename} done echo "自动化压力测试全部结束"
5. Jmeter 脚本 -线程数 脚本会将thread_num替换成需要执行的值

【脚本解释】
(1)uname :获取操作系统的名称
(2)pid=ps -ef|grep jmeter|grep java|grep ${jmx_filename}|awk '{print $2}'
获取进程号,我们可以在脚本运行过程中,在iTerm中查看一下
(3)nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下
sh auto_test.sh
【查看运行结果】
运行:sh auto_test.sh
使用jmeter打开聚合报告
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)