可直接复制使用的 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 个地方

  1. 线程数:100 → 改成你需要的并发
  2. 持续时间:86400 秒(24h)
    • 12h = 43200
    • 72h = 259200
  3. 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 小时无大量报错、无宕机
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐