静默压测
- 高并发压测场景中,为了减少压测工具对压测机的影响,一般采用静默(无界面)的压测模式
- 静默压测时,可以通过对脚本的修改,达到自动化压测的效果
jmeter -n -t *.jmx -l test1.jtl -e -o report1/ -r
参数解析:
-n:非GUI模式执行Jmeter
-t:执行测试文件所在的位置及文件名
-l:指定生成测试结果的保存文件,jtl文件格式
-j:指定日志路径,路径不存在则自动创建
-e:测试结束后,生成测试报告
-o:指定测试报告存放位置,且文件夹下必须为空
-g:指定测试结果文件路径,仅用于生成测试报表,参数为csv结果文件
-r:启动所有在remote_hosts配置的压测机
-R:启动在remote_hosts配置了且指定ip的压测器,语法: -R IP1,IP2,IP3
- 可以在压测结束后直接生成报告,也可根据压测结果单独生成报告
jmeter -n -t demo.jmx -l td01.jtl
mkdir report1 && jmeter -g td01.jtl -e -o report1
运行优先级
- jmeter运行有
控制循环次数
运行和控制持续时间
运行2种模式 - 优先级:
按次数循环 > 按照调度器时间 > 永远循环
- 设置次数后按照循环次数运行,其他设置无效
- 不设置循环次数时,脚本保存后默认勾选永远,运行时会持续运行
- 不设置循环次数时,勾选调度器,持续时间必填,运行时按照设置的时间持续运行
参数化运行
- 并发数设置为
${__P(concurrent_number,1)}
,默认1个用户并发 - 循环次数设置为
${__P(cycles,1)}
,默认1个循环 - 执行时长设置为
${__P(duration,60)}
,默认60s - 如果同时设置了循环次数和执行时长,优先循环次数。因此需按照持续时长运行时,需要去掉循环次数设置
jmeter -n -t demo1.jmx -J concurrent_number=8 -J duration=60 -J cycles=2
自动化运行
#! /bin/bash
export jmx_template="demo"
export suffix=".jmx"
export jmx_template_filename="${jmx_template}${suffix}"
export os_type=`uname`
export wait_time=10
export jmeter_path="/Users/whtest/package/apache-jmeter-5.4.3"
echo "自动化压测开始"
thread_number_array=(10 20 30)
for num in "${thread_number_array[@]}"
do
echo "============================================================"
echo "${num}线程压测开始"
export jmx_filename="${jmx_template}_${num}${suffix}"
export jtl_filename="test_${num}.jtl"
export web_report_path_name="web_${num}"
rm -f ${jmx_filename} ${jtl_filename}
rm -rf ${web_report_path_name}
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_path}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename}
${jmeter_path}/bin/jmeter -g ${jtl_filename} -e -o ${web_report_path_name}
rm -f ${jmx_filename} ${jtl_filename}
if [ ${num} -ne 30 ];then
echo "${num}线程压测结束,等待${wait_time}s"
sleep ${wait_time}
echo "============================================================"
else
echo "${num}线程压测结束"
echo "============================================================"
fi
done
echo "自动化压测全部结束"