jmeter静默压测
# JMeter 静默压测
${jmeter_path}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename}
# 生成Web压测报告
${jmeter_path}/bin/jmeter -g ${jtl_filename} -e -o ${web_report_path_name}
Linux 启动jmeter出现错误:
当使用jmeter 非GUI模式 对java请求进行性能测试时,在执行结束时会报错:
The JVM should have exitted but did not.
The following non-daemon threads are still running (DestroyJavaVM is OK):
导致这种错误原因
在执行java请求时会在jmeter线程之外,另外启动java线程,导致在脚本执行结束时JVM无法退出。
若要避免这种现象,需要修改bin/jmeter.properties 中的jmeterengine.force.system.exit=true
linux直接使用jmeter命令 需要配置jmeter环境变量
自动压测:
编写压测脚本,让脚本自动执行 实现线程数的压测
实现思路
jmeter 脚本 压测逻辑
shell 控制逻辑
并发数更改(linux 三剑客)
Jmeter静默运行 脱离UI限制 使得自动化运行更稳定
# 压测脚本模板中设定的压测时间应为60秒
export jmx_template="order_auto"
export suffix=".jmx"
export jmx_template_filename="${jmx_template}${suffix}"
export os_type=`uname`
# 需要在系统变量中定义jmeter根目录的位置,如下
export jmeter_path="/usr/local/appach/jmeter/apache-jmeter-5.3"
echo "自动化压测开始"
# 压测并发数列表
thread_number_array=(10 20 30 40)
for num in "${thread_number_array[@]}"
do
# 生成对应压测线程的jmx文件
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 静默压测
${jmeter_path}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename}
# 生成Web压测报告
${jmeter_path}/bin/jmeter -g ${jtl_filename} -e -o ${web_report_path_name}
rm -f ${jmx_filename} ${jtl_filename}
done
echo "自动化压测全部结束"
直接执行脚本
sudo ./auto_press.sh
压测结果如下:

测试数分别是10 20 30 40
拉取测试报告到本地,然后查看压测报告:
用户并发数为10时:

用户数为20时

用户并发数为30时:

用户并发数为40时:

可以看出在用户压测数为10 20 30 40 时,都没有出现错误,且流量是在增加的
接下来增加压测数据:
在用户数为100 200 300 400 时压测结果如下:
压测数100时:

压测数200

压测数300时:

压测数400时:

可以看出压测数为300时已经出现了错误,再增加用户数,错误率继续增加,所有可以找到最适宜的用户数在200-300之间
本文介绍了如何使用JMeter进行静默压测,并通过自动化脚本控制并发线程数进行性能测试。在Linux环境中,由于Java请求在JMeter线程外启动额外线程,导致JVM无法正常退出,解决方法是设置jmeterengine.force.system.exit=true。通过分析不同并发用户数(10, 20, 30, 40, 100, 200, 300, 400)的压测结果,发现最适宜的用户数在200-300之间,超过这个范围错误率会上升。
4112

被折叠的 条评论
为什么被折叠?



