jmeter 做自动化测试这件事我从最早的手工点接口到后来用 jmeter 搭建整套接口自动化回归踩过的坑比写过的脚本还多。很多人第一次接触 jmeter 是因为要做性能压测但真正把它用顺之后会发现jmeter 在接口自动化测试、数据驱动测试、持续集成里同样能扛事。它不挑语言不用写太多代码配置化程度高团队里只要有人懂 HTTP 协议就能快速上手。不过想从“会用”到“用好”中间隔着一整套实施方案环境怎么配、脚本怎么录、参数化怎么做、断言怎么写、报告怎么出、CI 怎么接、报错怎么查。这篇文章我把自己带团队落地 jmeter 自动化测试的过程拆开讲从安装包下载到分布式压测从 CSV 分块取值到 BeanShell 断言尽量把每个环节的坑和技巧都摊开。适合刚接触 jmeter 的测试同学也适合已经把 jmeter 当压测工具、想把它扩展到自动化回归的人。下面直接进入正题不绕弯子。1. 为什么选择 JMeter 做自动化测试场景与选型思考1.1 从手工到自动化JMeter 到底解决什么问题我最早带项目的时候接口测试全靠 Postman 手工点一个回归用例集上百个接口每次发版前都要加班重跑一遍。后来换成 Python 自动化框架脚本灵活但维护成本高业务一变就得改代码测试同学还得补 Python 语法。再后来用 jmeter 重做最大的感受是它把“协议级测试”这件事标准化了。你不需要为每个接口写类、写方法只要在线程组里加 HTTP 请求填服务器 IP、端口、路径、方法、参数就能跑。对于接口自动化测试来说jmeter 的核心价值在于“低代码配置 高并发能力 成熟的结果统计”。它天然支持 HTTP、HTTPS、TCP、JDBC、MQTT 等协议内置函数和变量系统能完成大部分参数化需求BeanShell 和 JSR223 又能让你在关键节点插入自定义逻辑。更关键的是jmeter 的测试计划可以保存为 .jmx 文件直接放进 Git 做版本管理配合命令行执行就能接入 Jenkins 做每日回归。我见过很多团队用 jmeter 做接口自动化把测试用例按业务模块拆成不同线程组用 CSV 管理测试数据用断言控制失败最后生成 HTML 报告。整个过程不需要写框架代码测试同学自己就能维护。当然jmeter 不是银弹它的脚本可读性不如代码框架复杂逻辑写起来会别扭但对于以 HTTP 接口为主、追求快速落地的团队来说它是最稳的起点。1.2 选型对比JMeter、Postman、Python 框架怎么选我经常被问“jmeter 和 Postman 做自动化有什么区别”。简单说Postman 更适合单接口调试和轻量级集合测试它的 Newman 命令行也能跑 CI但并发能力弱参数化和断言能力有限。Python Requests Pytest 框架最灵活适合复杂业务逻辑、数据库校验、加密签名但需要编码能力维护门槛高。jmeter 卡在中间比 Postman 重比代码框架轻。它适合的场景我总结了几类一是接口数量多、协议统一、以回归为主二是需要同时做功能自动化和性能压测三是团队里测试人员代码基础参差不齐需要一套统一工具四是要模拟多用户并发、分布式压测。反过来如果业务接口有复杂加密、动态签名、多接口依赖链、需要频繁改逻辑那用代码框架更合适。我自己的做法是混合核心复杂链路用 Python 写大批量接口回归和压测用 jmeter。这样既保证灵活性又降低维护成本。选型时还要看团队现状如果已经有一套 jmeter 压测体系再扩展自动化测试是最顺的不用重新搭轮子。1.3 自动化测试的边界哪些事不适合硬塞给 JMeterjmeter 虽然能通过 BeanShell、JSR223、OS Process Sampler 做很多事但有些场景硬塞进去只会让脚本变成“四不像”。比如 UI 自动化jmeter 做不了浏览器操作那是 Selenium、Appium 的活。再比如复杂的断言逻辑需要调用外部 Java 库、解析多层嵌套 JSON、做数据库多表校验用 BeanShell 写会非常痛苦调试也麻烦。还有文件上传、WebSocket 长连接、gRPC 这些jmeter 有插件支持但配置成本不低。我的经验是jmeter 自动化测试的主战场是 HTTP/HTTPS 接口的功能回归和性能验证以及基于数据库的参数化测试。它擅长的是“请求-响应-断言-报告”这条流水线。如果某个用例需要大量前置计算、动态 token 生成、复杂加密最好用代码封装成函数再通过 jmeter 的 JSR223 调用或者直接交给代码框架。不要为了统一工具而统一工具是拿来解决问题的不是拿来限制自己的。明确边界之后jmeter 的实施方案才能聚焦后面所有配置和技巧都围绕这个边界展开。2. 环境搭建与基础配置一次搞定安装与调优2.1 下载与安装避开官网之外的坑jmeter 下载认准 Apache 官网别去各种下载站那些捆绑安装包和旧版本会让人怀疑人生。官网提供 zip 和 tgz 两种包Windows 下直接下 zip解压到非中文、无空格的路径比如D:\tools\apache-jmeter-5.6.3。解压后目录结构要认识bin放启动脚本和配置文件lib放核心 jar 和扩展包lib/ext放插件extras放 ant 和 Jenkins 相关文件。启动方式有两种Windows 双击bin\jmeter.batLinux/Mac 执行bin/jmeter.sh。第一次启动如果界面卡顿可以改bin/jmeter.bat里的堆内存参数把HEAP默认的-Xms1g -Xmx1g调大比如-Xms2g -Xmx4g具体看机器内存。安装 jmeter 之前必须装 JDKjmeter 5.6 需要 Java 8 以上我一般用 JDK 11 或 17兼容性好。装完 JDK 后配置JAVA_HOME命令行执行java -version能输出版本就行。注意 jmeter 不需要单独安装解压即用但 JDK 必须提前准备好。很多人问 jmeter 安装包多大大概 80 多 MB解压后 200 MB 左右不占地方。如果公司内网无法访问官网提前下载好放到共享盘别等到用的时候再折腾。2.2 JDK 版本与内存参数调优JDK 版本选不对jmeter 启动会报Unsupported class file major version或者界面乱码。我实测 JDK 8、11、17 都能跑 jmeter 5.6.x但 JDK 8 对高版本 TLS 支持稍差如果测试 HTTPS 接口遇到握手失败优先换 JDK 11。内存参数在bin/jmeter.bat或jmeter.sh里改找到set HEAP-Xms1g -Xmx1g -XX:MaxMetaspaceSize256m这一行。GUI 模式下建议-Xms1g -Xmx2g命令行压测可以-Xms2g -Xmx4g。如果线程数超过 500堆内存至少 4G否则容易 OOM。还有几个参数值得调-XX:UseG1GC启用 G1 垃圾回收减少停顿-Dfile.encodingUTF-8防止 CSV 文件乱码-Djava.awt.headlesstrue在 Linux 无界面环境跑。我遇到过压测跑到一半卡死最后发现是默认堆内存太小改完就稳了。另外jmeter 的 GUI 模式不要用来跑高并发GUI 本身消耗资源真正压测用命令行jmeter -n -t test.jmx -l result.jtl -e -o report。这个命令后面会细说。2.3 界面与常用配置字体、语言、代理jmeter 默认字体小中文显示有时发虚很多人搜“jmeter 界面怎么调字体大小”。正确姿势是改bin/jmeter.properties。找jmeter.hidpi.mode设为truejmeter.hidpi.scale.factor设为1.5或2.0重启后界面会整体放大。如果只想调代码编辑器字体改jsyntaxtextarea.font.size20。语言切换在jmeter.properties里改languagezh_CN但我不建议用中文界面因为很多术语翻译后反而看不懂保持英文更稳。代理设置是录制 HTTPS 脚本的关键在jmeter.properties里配置http.proxyHost、http.proxyPort或者直接在 HTTP 请求里设置代理服务器。录制时要在浏览器里设置代理指向 jmeter 的 8888 端口。还有一个常用配置是cookie.manager.save和CookieManager.check.cookies默认开启就行。如果测试 RESTful 接口建议在jmeter.properties里打开HTTPResponse.parsershtmlParser jsoupParser方便提取。常用配置改完记得备份升级 jmeter 时直接覆盖配置文件省得重新设置。2.4 证书与 HTTPS 脚本录制准备录制 HTTPS 脚本绕不开安全证书。jmeter 的bin目录下有一个ApacheJMeterTemporaryRootCA.crt第一次启动录制时会自动生成。你需要把这个证书导入浏览器或系统信任区否则录制 HTTPS 时浏览器会报证书错误抓不到请求。具体操作启动 jmeter点击工具栏的“录制”按钮或者手动添加 HTTP(S) Test Script Recorder设置端口 8888目标控制器选测试计划。然后点击“Start”jmeter 会生成证书。在浏览器里导入证书选择“受信任的根证书颁发机构”。不同浏览器导入方式不同Chrome 用系统证书管理器Firefox 有独立证书库。导入后浏览器代理设为localhost:8888访问目标网站jmeter 就能录下请求。注意录制完记得关闭代理否则浏览器上不了网。如果目标网站有双向认证还需要在 jmeter 的 Keystore 配置里导入客户端证书。安全证书这块别嫌麻烦一次配好后面录制脚本就顺了。3. 脚本开发核心技能从录制到手写3.1 录制 HTTPS 脚本的完整步骤与过滤策略jmeter 录制脚本适合快速获取接口列表但不建议直接拿录制的脚本跑自动化。录制流程我走一遍先添加线程组再添加 HTTP(S) Test Script Recorder设置端口 8888目标控制器选线程组。在 Requests Filtering 里可以设置包含或排除 URL 模式比如只录.*\.php或排除图片.*\.png、.*\.css。点 Start 后浏览器设代理操作页面jmeter 会把请求录到线程组下。录完导出为 .jmx。但录制的脚本有很多问题请求头冗余、包含浏览器特有参数、URL 带随机数、Cookie 混乱、断言缺失。所以我的做法是录制只用来拿接口清单和参数示例然后手工整理。把无关请求删掉把动态参数替换成变量把 Cookie 管理器换成 HTTP Cookie Manager 自动管理。对于 HTTPS 录制还要注意录到的域名和端口是否正确。如果录不到检查浏览器代理、证书信任、jmeter 代理端口是否被占用。录制只是起点后面的参数化和断言才是自动化测试的核心。3.2 手动搭建接口测试脚本HTTP 请求、RESTful 参数写法手写 jmeter 接口脚本比录制干净得多。一个标准的 HTTP 请求取样器要填协议、服务器名称或 IP、端口、方法、路径。RESTful 参数怎么写在 jmeter 里是高频问题。路径参数直接拼在 URL 里比如/api/user/${userId}查询参数可以写在路径后?page1size10也可以用Parameters表格JSON body 选择Body Data把 JSON 贴进去注意变量引用${token}。如果接口是 PUT/DELETE方法选对body 照填。请求头在 HTTP Header Manager 里统一加比如Content-Type: application/json、Authorization: Bearer ${token}。我习惯把公共域名、端口、协议抽成用户定义变量方便切换环境。对于文件上传接口用 HTTP 请求的 Files Upload 选项卡填文件路径、参数名、MIME 类型注意勾选Use multipart/form-data。RESTful 接口经常返回 JSON后面用 JSON 提取器或 JSON 断言处理。一个线程组里可以放多个请求用逻辑控制器控制顺序比如事务控制器把多个请求包成一个事务方便统计响应时间。3.3 参数化实战CSV 分块取值、数据库参数化参数化是自动化测试的灵魂。jmeter 最常用的是 CSV Data Set Config。在配置元件里添加填写文件名、变量名、分隔符、是否允许引号、遇到文件结束是否循环、线程共享模式。重点说“每个线程分块取值”这个需求如果 CSV 有 100 行数据10 个线程希望每个线程取不同的 10 行怎么配CSV Data Set Config 的 Sharing mode 选All threads时所有线程共享同一个文件指针顺序取值可能线程 A 取第 1 行线程 B 取第 2 行不是分块。要实现分块可以用__threadNum和__counter函数计算行号结合__CSVRead函数。比如__CSVRead(data.csv,${__intSum(${__threadNum},0)})这种方式很绕。更简单的是把大文件拆成小文件每个线程用不同的 CSV 文件文件名用变量拼比如data_${__threadNum}.csv。另外数据库参数化用 JDBC Connection Configuration 和 JDBC Request先连接数据库用 SELECT 查出数据保存到变量再在 HTTP 请求里引用。比如SELECT username, password FROM test_users WHERE status1结果保存为username_1、password_1然后用${username_1}引用。JDBC 请求里要设置Variable Names和Result Variable Name。数据库参数化适合数据量大、需要动态取值的场景但注意连接池和查询性能。3.4 断言体系响应断言、JSON 断言、BeanShell 断言断言决定自动化测试是否可信。jmeter 自带响应断言、JSON 断言、持续时间断言、大小断言还有 BeanShell 断言和 JSR223 断言。响应断言检查响应文本、响应码、响应头最常用的是检查 HTTP 状态码 200 和响应文本包含某个字符串。JSON 断言适合 RESTful 接口用 JSONPath 表达式提取字段比如$.code等于0$.data.id存在。BeanShell 断言更灵活可以写 Java 代码。比如需要判断响应中某个字段值大于 100或者根据多个字段组合判断就可以写String response prev.getResponseDataAsString(); if (!response.contains(success)) { Failure true; FailureMessage 响应未包含 success实际响应 response; }BeanShell 断言里可以访问prev获取响应访问vars获取变量访问props获取属性。注意 BeanShell 性能较差高并发时尽量用 JSR223 加 Groovy。断言不要写得太复杂失败信息要清晰方便排查。每个请求至少加一个状态码断言关键业务加业务码断言重要字段加 JSON 断言。断言太多会拖慢执行太少又没意义我一般控制在每个请求 2 到 3 个断言。3.5 关联与后置处理正则提取、JSON 提取、跨线程传参接口自动化绕不开关联上一个接口的响应要作为下一个接口的入参。jmeter 提供正则表达式提取器、JSON 提取器、XPath 提取器、边界提取器。最常用的是 JSON 提取器配置变量名、JSONPath 表达式、匹配数字、默认值。比如登录接口返回{token:abc123}用 JSON 提取器提取$.token保存为token下一个请求用${token}引用。正则提取器适合非 JSON 响应比如 HTML 或纯文本写正则表达式时注意分组模板$1$表示取第一个分组。跨线程传参用__setProperty和__property函数或者用 BeanShell 后置处理器把变量设成全局属性。比如在线程组 A 里提取 token用props.put(token, vars.get(token))在线程组 B 里用${__P(token)}引用。注意属性是全局的线程间共享但线程组执行顺序要控制好可以用Run Thread Groups consecutively勾选。关联提取后最好加一个调试取样器确认变量值正确。提取不到时检查 JSONPath 写法、响应格式、匹配数字以及是否有多个匹配。4. 自动化测试框架设计让脚本可维护、可集成4.1 分层设计测试计划、线程组、控制器、取样器jmeter 的脚本很容易写成“一锅粥”所有请求堆在一个线程组里参数硬编码断言乱七八糟。要让它可维护得做分层。我的分层思路是测试计划作为最外层放用户定义变量和全局配置线程组按业务模块或测试类型拆分比如登录模块、订单模块、支付模块逻辑控制器控制流程比如事务控制器把一组请求包成事务循环控制器控制迭代If 控制器做条件判断取样器只负责发请求参数尽量用变量配置元件放 HTTP 请求默认值、HTTP Cookie 管理器、HTTP 头管理器、CSV 数据文件设置后置处理器处理关联断言处理校验。这样拆完之后改环境只改用户定义变量改数据只改 CSV改流程只改控制器。我一般会建一个公共线程组放登录和获取 token 的请求其他线程组依赖这个 token。还可以用模块控制器复用公共片段。分层之后脚本的 .jmx 文件结构清晰Git diff 也好看团队协作不容易冲突。4.2 数据驱动与模块化CSV 变量 函数数据驱动的核心是把测试数据和脚本分离。jmeter 里用 CSV Data Set Config 读取测试数据用变量引用用函数处理动态值。比如 CSV 文件定义用户名、密码、预期结果每个线程读一行执行登录和查询断言预期结果。模块化可以用 Test Fragment 加 Module Controller把公共请求片段抽出来多个线程组复用。还可以用 Include Controller 引入外部 .jmx 文件。函数方面__Random生成随机数__time生成时间戳__UUID生成唯一 ID__counter做计数器__threadNum取线程号。这些函数在参数化时非常有用。我习惯在用户定义变量里定义环境相关的变量比如host、port、protocol然后在 CSV 里定义业务数据。这样切换测试环境只需要改用户定义变量不用动 CSV。数据驱动做好之后增加测试用例只需要加一行 CSV 数据不用改脚本结构。这是 jmeter 自动化测试能规模化的关键。4.3 持续集成命令行执行、生成报告、Jenkins 集成jmeter 接入 CI 是自动化测试落地的最后一公里。GUI 模式不适合 CI必须用命令行。基本命令jmeter -n -t test.jmx -l result.jtl -e -o report-n非 GUI 模式-t指定测试计划-l指定结果文件-e生成 HTML 报告-o指定报告目录。注意报告目录必须为空否则报错。结果文件 .jtl 是 CSV 格式可以用jmeter -g result.jtl -o report单独生成报告。Jenkins 集成时可以用 JMeter Plugins 的 Performance Plugin 解析 .jtl展示趋势图。也可以用 shell 步骤执行命令然后归档报告目录。我一般会在 Jenkins 里配置参数化构建选择测试环境和测试套件执行后把 HTML 报告发布出去。如果断言失败jmeter 默认返回 0CI 会认为成功。需要加-Jjmeter.save.saveservice.assertion_results_failure_messagetrue并解析结果或者用jmeter -n -t test.jmx -l result.jtl -e -o report -f强制覆盖然后通过检查 .jtl 中失败断言数来判断构建是否失败。更简单的办法是用--loglevel和退出码插件但需要额外配置。我通常写一个 shell 脚本跑完 jmeter 后用 grep 检查result.jtl里是否有false断言有就 exit 1。4.4 报告与结果分析查看结果树导出、聚合报告、HTML 报告结果分析是自动化测试的价值出口。GUI 模式下查看结果树是最常用的但只能看少量请求数据量大时会卡死。查看结果树可以导出为 CSV 或 XML点击“浏览”选择保存路径即可。命令行跑完生成的 HTML 报告更专业包含 APDEX、响应时间分布、TPS、错误率等图表。聚合报告适合快速看整体指标样本数、平均值、中位数、90% 线、95% 线、99% 线、最小、最大、错误率、吞吐量。我关注三个指标错误率是否超过 0.1%95% 响应时间是否超过 SLATPS 是否达到预期。如果错误率高去 .jtl 里筛选失败请求看断言消息和响应数据。如果响应时间波动大检查是否有线程竞争、数据库慢查询、网络抖动。HTML 报告里的“Errors”表格会列出错误类型和数量非常直观。注意 HTML 报告生成会消耗资源大压测时不要同时生成先保存 .jtl再离线生成。查看结果树导出时可以只导出失败的请求减少数据量。5. 性能压测与自动化测试的结合5.1 压测场景设计线程数、Ramp-up、循环次数jmeter 做性能测试和自动化测试的配置思路不一样。自动化测试关注功能正确性线程数通常 1 到 5循环 1 次。压测关注系统承载能力线程数、Ramp-up、循环次数要精心设计。线程数模拟并发用户数Ramp-up 是多久内启动完这些线程循环次数是每个线程执行多少轮。比如模拟 100 用户并发Ramp-up 设 10 秒循环 10 次意味着 10 秒内启动 100 个线程每个线程跑 10 轮。如果 Ramp-up 太小瞬间冲击大容易压垮服务太大则达不到并发效果。一般 Ramp-up 线程数 / 目标 TPS 的倒数但更常用经验值100 线程以内Ramp-up 设 5 到 10 秒。循环次数根据测试时长定如果要做 10 分钟压测可以设循环次数为 -1永远循环用调度器控制持续时间。压测场景还要考虑思考时间用定时器模拟用户停顿常数吞吐量定时器可以控制 TPS。我一般先用 10 线程跑通脚本确认无错误再逐步加到目标并发观察 TPS 和响应时间拐点。5.2 模拟 100 用户并发的参数计算与实操模拟 100 用户并发报告是热搜词我详细说下。线程组设置线程数 100Ramp-up 10循环次数 10。假设每个请求平均响应时间 200ms那么单线程每秒能发 5 个请求100 线程理论 TPS 500。但实际受限于服务端处理能力可能只有 200。跑完后看聚合报告如果 95% 响应时间超过 1 秒说明服务端有瓶颈。参数计算总请求数 线程数 × 循环次数 100 × 10 1000。总执行时间 ≈ Ramp-up (循环次数 × 平均响应时间) 10 10 × 0.2 12 秒。平均 TPS 1000 / 12 ≈ 83。这个估算可以用来验证结果是否合理。实操时先加一个 HTTP 请求默认值设置域名和端口。加 CSV 数据文件准备 100 行用户数据线程共享模式选All threads。加聚合报告和查看结果树调试时用。命令行执行jmeter -n -t 100users.jmx -l result.jtl -e -o report跑完打开 report/index.html看 TPS 曲线和响应时间。如果错误率高检查服务端日志、数据库连接池、线程池配置。注意压测机自身资源100 线程对 jmeter 压力不大但 1000 线程就需要调大堆内存甚至分布式压测。5.3 分布式压测与资源监控单台 jmeter 压不出更高并发时用分布式压测。架构是一台 Master 控制多台 Slave。Slave 上装同版本 jmeter启动jmeter-server。Master 的jmeter.properties里配置remote_hostsslave1:1099,slave2:1099。命令行用-R指定远程主机或者 GUI 里远程启动。注意 Slave 和 Master 要在同一网段防火墙开放 1099 端口JDK 版本一致。分布式压测时CSV 文件要同步到每台 Slave或者用共享存储。资源监控方面jmeter 自带 PerfMon Metrics Collector 插件可以监控服务端的 CPU、内存、磁盘、网络。服务端部署 ServerAgentjmeter 里加监听器配置 IP 和端口 4444。压测时观察服务端资源曲线如果 CPU 到 80% 以上响应时间开始飙升说明到了容量上限。我习惯同时开 jmeter 的聚合报告和 PerfMon实时看 TPS 和资源的关系。分布式压测的结果会汇总到 Master报告和单机一样生成。注意 Slave 的负载要均衡避免有的 Slave 跑满有的空闲。6. 常见问题与排查技巧实录6.1 连接类报错error writing to server、连接超时java.io.IOException: error writing to server是 jmeter 高频报错通常发生在请求体较大或服务端提前关闭连接时。原因可能有请求头Content-Length不对、服务端 read timeout、网络不稳定、代理干扰。排查步骤先看请求体大小如果超过几 MB检查服务端最大请求体限制检查jmeter.properties里的http.socket.timeout和http.connection.timeout默认 0 表示无限等待可以设为 60000 毫秒检查是否启用了 keep-alive如果服务端不支持长连接在 HTTP 请求里取消勾选Use KeepAlive如果是 HTTPS检查 SSL 配置。另一个常见报错是Connection timed out一般是 IP 或端口不通用telnet或curl先验证。如果只有高并发时出现可能是服务端连接队列满调大 backlog。还有Non HTTP response code: java.net.SocketException多半是连接被重置检查服务端线程池和连接池配置。我一般会在 HTTP 请求默认值里加超时失败时看 .jtl 里的响应数据定位是客户端还是服务端问题。6.2 参数化与编码问题数据库密码、文件已存在、CSV 乱码数据库参数化时jmeter 的 mysql 密码要在 JDBC Connection Configuration 里填注意密码不要明文提交到 Git可以用__P属性从命令行传入。jmeter 文件已经存在报错通常是在生成 HTML 报告时指定的-o目录非空删除目录重新跑即可。CSV 乱码问题CSV 文件保存为 UTF-8 无 BOM 格式jmeter.properties里加sampleresult.default.encodingUTF-8CSV Data Set Config 里文件编码选 UTF-8。如果 CSV 里包含中文和逗号用双引号包裹字段并勾选Allow quoted data。还有jmeter 在同一个 csv 参数化文件中每个线程分块取值前面说过可以用线程号计算行号或者拆文件。数据库参数化时JDBC 请求的Variable Names要和 SQL 里的列名对应多个列用逗号分隔。如果查询返回多行jmeter 只会取第一行到变量除非用Result Variable Name保存所有行再用__V或 BeanShell 遍历。注意数据库连接池不要设太大否则压测时把数据库连接占满。6.3 防伪标记与安全校验__RequestVerificationToken 未提供测试 MVC 项目时遇到__RequestVerificationToken 未提供必要的防伪标记这是 ASP.NET MVC 的防跨站请求伪造机制。解决办法是先发一个 GET 请求获取页面用正则提取器或 XPath 提取器拿到__RequestVerificationToken的值保存为变量再在 POST 请求里带上这个参数。正则表达式可以写name__RequestVerificationToken typehidden value(.?)模板$1$。注意 token 有时效性每次请求前重新获取。如果页面是 AJAX 提交token 可能在响应头或 JSON 里用 JSON 提取器提取。类似的安全校验还有 CSRF token、JWT、签名参数思路都一样先获取再携带。如果 token 加密或动态生成可能需要用 JSR223 前置处理器调用 Java 代码生成。这类问题排查时先用浏览器 F12 看请求头、请求体、Cookie确认 token 在哪个位置再在 jmeter 里模拟。别忘了 HTTP Cookie 管理器要开启否则会话丢失。6.4 插件与扩展MQTT 插件下载与安装jmeter 原生不支持 MQTT需要装插件。步骤下载 JMeter Plugins Manager放到lib/ext目录重启 jmeter在 Options 里打开 Plugins Manager搜索 MQTT安装。安装后线程组里可以添加 MQTT Publisher 和 MQTT Subscriber。配置 MQTT 连接服务器地址、端口、客户端 ID、用户名、密码、QoS 等级。发布消息填主题和消息体订阅消息填主题和超时。测试 IoT 场景时可以用 MQTT 插件模拟设备上报。注意插件版本要和 jmeter 版本兼容装完重启。其他常用插件PerfMon Metrics Collector、Custom Thread Groups、JSON Path Extractor新版已内置、Dummy Sampler。插件装多了会拖慢启动按需安装。如果内网无法访问插件市场手动下载 jar 放到lib/ext重启即可。安装插件后原来的 .jmx 如果用了插件元件别人没有插件会报错团队里要统一插件版本。6.5 面试常问的 JMeter 自动化测试问题jmeter 自动化测试面试题经常问这些jmeter 怎么做参数化答 CSV Data Set Config、用户定义变量、函数、数据库。jmeter 怎么做关联答正则提取器、JSON 提取器、XPath 提取器。jmeter 怎么做断言答响应断言、JSON 断言、BeanShell 断言。jmeter 怎么做持续集成答命令行执行、生成 HTML 报告、Jenkins 集成。jmeter 和 LoadRunner 区别答开源、轻量、跨平台、脚本可读性弱但扩展性强。jmeter 怎么做分布式答 Master-Slave 架构配置 remote_hosts。jmeter 怎么做数据库测试答 JDBC Connection Configuration 和 JDBC Request。jmeter 怎么做 HTTPS 录制答安装证书、设置代理、过滤请求。还有问“大厂自动化测试都干什么内容”一般答接口自动化、UI 自动化、性能测试、持续集成、测试平台开发。面试时除了工具操作还会问测试框架设计、测试左移、质量门禁。我建议准备一两个实际项目案例讲清楚怎么用 jmeter 解决具体问题比背题管用。最后说个我自己的习惯每次跑完自动化测试不管成功失败都把 .jtl 和 HTML 报告归档到当天日期目录失败用例单独记到表格里每周复盘一次。jmeter 的脚本不要怕改版本控制做好每次改动写清楚原因。踩过的坑多了你会发现最耗时间的不是写脚本而是排查环境和数据问题。把公共配置抽出来把断言写清楚把报告自动化剩下的就是不断补充用例。这套实施方案我用了三年从十几个接口到上千个接口回归jmeter 一直很稳。