JMeter 疲劳测试完整方案
·
可直接复制使用的 JMeter 疲劳测试完整方案:1)可导入的 .jmx 脚本内容2)标准 24h 疲劳配置3)执行命令 + 后台运行脚本4)监控指标检查表
一、JMeter 疲劳测试脚本(直接复制保存为 fatigue_test.jmx)
新建文本文件,复制下面全部内容,保存为 fatigue_test.jmx,然后用 JMeter 打开即可。
xml
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="疲劳测试-24小时稳定压测" enabled="true">
<stringProp name="TestPlan.comments">标准疲劳测试:固定并发、长时间运行、检查稳定性</stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="疲劳线程组" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<boolProp name="LoopController.continue_forever">true</boolProp>
<stringProp name="LoopController.loops">-1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">120</stringProp>
<longProp name="ThreadGroup.start_time">1700000000000</longProp>
<longProp name="ThreadGroup.end_time">1700000000000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.duration">86400</stringProp>
<stringProp name="ThreadGroup.delay">0</stringProp>
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="示例接口" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="参数" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">www.baidu.com</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.implementation">HttpClient5</stringProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言200" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="0">200</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">8</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="思考时间500ms" enabled="true">
<stringProp name="ConstantTimer.delay">500</stringProp>
</ConstantTimer>
<hashTree/>
</hashTree>
<SummaryReport guiclass="SummaryReportGui" testclass="SummaryReport" testname="聚合报告" enabled="true"/>
<hashTree/>
<BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="后端监听器(可选InfluxDB)" enabled="false">
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="influxdbUrl" elementType="Argument">
<stringProp name="Argument.name">influxdbUrl</stringProp>
<stringProp name="Argument.value">http://127.0.0.1:8086/write?db=jmeter</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="application" elementType="Argument">
<stringProp name="Argument.name">application</stringProp>
<stringProp name="Argument.value">fatigue-test</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="backendListenerImplementation">org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient</stringProp>
</BackendListener>
<hashTree/>
</hashTree>
</hashTree>
</jmeterTestPlan>
你只需要改 3 个地方
- 线程数:100 → 改成你需要的并发
- 持续时间:86400 秒(24h)
- 12h = 43200
- 72h = 259200
- HTTP 请求:域名、路径、参数、请求头换成你的接口
二、推荐疲劳配置(直接照抄)
- 线程数:100(日常峰值的 50%~80%)
- Ramp-Up:120 秒(平缓加压)
- 循环:永远循环
- 持续时间:86400 秒 = 24 小时
- 思考时间:500ms(更接近真实用户)
- 断言:响应码 = 200
三、Linux 后台 24h 运行命令(防止断连)
新建 run_fatigue.sh,复制下面内容:
bash
运行
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
RESULT=result_${DATE}.jtl
REPORT=report_${DATE}
nohup jmeter -n -t fatigue_test.jmx -l ${RESULT} -e -o ${REPORT} > jmeter.log 2>&1 &
echo "疲劳测试已后台启动,PID: $!"
echo "日志: jmeter.log"
echo "结果: ${RESULT}"
echo "HTML报告: ${REPORT}"
运行:
bash
运行
chmod +x run_fatigue.sh
./run_fatigue.sh
查看是否在跑:
bash
运行
ps -ef | grep jmeter
停止:
bash
运行
pkill -f jmeter
四、疲劳测试必看监控指标(直接对照检查)
1)JMeter 指标(每 6 小时记录一次)
- 错误率:必须 ≈ 0%
- 平均响应时间:不能持续上升
- TPS 吞吐量:平稳不下跌
- 95%/99% 响应时间:无明显抖动
2)服务器指标(Linux)
bash
运行
# CPU
top
# 内存
free -h
# 磁盘
df -h
# IO
iostat -x 1
# 连接数
netstat -an | grep ESTABLISHED | wc -l
# Java应用GC
jstat -gc 进程ID 1000 5
3)判定标准(疲劳通过)
- CPU:稳定在 70% 以下
- 内存:不持续增长(无内存泄漏)
- FullGC:频率稳定、耗时不增加
- 连接数 / 句柄:不持续上涨
- 24 小时无大量报错、无宕机
更多推荐
所有评论(0)