JMeter代理服务器录制脚本的本质是让JMeter充当中间人,拦截浏览器与服务器之间的HTTP/HTTPS请求并自动生成脚本,是新手快速创建测试计划最直观的方式,但在HTTPS和动态参数场景下需要额外配置。
为什么要用代理服务器录制而不是手写脚本
很多刚接触性能测试的人会问:JMeter明明支持手动编写HTTP请求,为什么还要多此一举用代理录制?道理很简单,一个实际业务操作往往包含数十个接口调用,比如登录、查询、下单、支付,每个接口又涉及请求头、Cookie、参数签名,手写这些内容既繁琐又容易遗漏,而代理录制就像给浏览器装了一个监控摄像头,你正常点击操作,它把背后的请求全部记录下来,自动转换成JMeter脚本。
行业共识认为,代理录制更适合以下场景:业务流程复杂但操作路径明确、需要快速建立基线脚本、团队中有业务人员但不熟悉代码,相比之下,手写脚本适合接口相对固定、需要精细控制断言和参数化的场景,所以代理录制不是替代手写,而是降低入门门槛,让你把精力集中在后续的参数化和关联上。
代理服务器录制的完整操作流程
第一步:创建代理服务器组件
在JMeter中,右键点击“测试计划” -> “添加” -> “非测试元件” -> “HTTP代理服务器”,这里的核心配置有三个:
- 端口:默认8888,如果被占用就换一个,比如8889。
- 目标控制器:选择脚本存放的位置,通常新建一个线程组专门放录制结果。
- 分组:建议选择“每个组放入一个新的控制器”,这样录制后的请求会按业务模块自动分组,阅读起来清晰很多。
第二步:设置浏览器代理
打开浏览器(Chrome、Firefox均可)的网络设置,手动配置代理。IP地址填127.0.0.1,端口必须与JMeter代理服务器端口一致,以Chrome为例,路径是“设置” -> “系统” -> “打开您计算机的代理设置”,在“局域网设置”里勾选“为LAN使用代理服务器”。
行业专家指出,这里最常见的坑是忘记关闭系统代理,录制完成后如果不上网,代理没关会导致所有网页打不开,甚至其他软件报错。
第三步:启动录制并操作业务
点击JMeter代理服务器面板的“启动”按钮,然后回到浏览器,正常执行你要录制的业务流程,比如登录、浏览商品、加入购物车、提交订单,操作完成后,点击“停止”按钮,此时你会在目标线程组里看到录制生成的HTTP请求列表。

第四步:脚本回放验证
录制结束后,先别急着跑压测,回放脚本,查看响应数据是否正常,如果响应码是200但内容不对,多半是动态参数没处理好,这部分下面细说。
jmeter代理服务器录制https脚本的具体配置
现在大部分网站都是HTTPS,直接用HTTP代理录制会发现请求全是加密的,JMeter录不到内容,解决思路是安装JMeter自带的根证书,让JMeter能解密HTTPS流量,具体路径如下:
- 在JMeter代理服务器面板,勾选“HTTPS Domains”输入框,填上要录制的域名(也可以留空表示所有域名)。
- 点击“生成根CA证书”按钮,JMeter会在bin目录下生成一个ApacheJMeterTemporaryRootCA.crt文件。
- 双击这个证书文件,将它安装到系统的“受信任的根证书颁发机构”存储区,Windows上需要选择“本地计算机”并输入管理员密码。
- 重启浏览器和JMeter,再次启动代理录制。
这里有一个容易忽略的细节:如果浏览器之前已经缓存了证书错误,需要清除SSL状态或重启浏览器,另外Android手机录制HTTPS时,同样要安装这个CA证书,而且不同安卓版本的安装路径有差异。
录制过程中遇到的典型问题及解决方案
jmeter代理服务器录制脚本失败排查
录制失败是最常见的问题,业内专家指出,90%的失败原因集中在以下三类:
- 代理端口冲突:检查8888端口是否被其他程序占用,命令行执行
netstat -ano | findstr 8888即可查看。 - 浏览器代理未生效:部分浏览器插件会强制覆盖代理设置,比如SwitchyOmega需要切换到“系统代理”模式。
- HTTPS证书未信任:如果浏览器访问任何网站都提示证书无效,说明证书安装不对,重新安装并确保选择“受信任的根证书颁发机构”。
录制后脚本乱码的处理
录制生成的脚本中,如果请求参数或响应数据出现中文乱码,原因是JMeter默认编码与网页编码不一致,解决办法是修改JMeter的配置文件bin/jmeter.properties,找到sampleresult.default.encoding,把默认值改为UTF-8,保存后重启JMeter,如果接口返回的是GBK编码,则需要将编码值改为

GBK,或者在后置处理器中用prev.setDataEncoding("GBK")动态设置。
录制脚本的性能测试实战要点
录制完成只是第一步,要让脚本真正可用,还需要做三件事:
参数化:用文件代替硬编码
录制脚本中,用户名、密码、商品ID都是写死的,用CSV数据文件设置将这些值替换为变量,右键点击请求 -> “添加” -> “前置处理器” -> “用户参数”,或者在线程组层面使用“CSV数据文件设置”,这样压测时每个虚拟用户都能取到不同的数据,更接近真实场景。
关联:处理动态变化的Token
很多网站登录后会返回一个Token,后续请求都带这个Token,录制时Token是固定的,回放时服务器会校验,旧的Token会失效,解决办法是用“正则表达式提取器”或“JSON提取器”从登录响应中取出Token,再通过${token}引用,比如登录接口返回{"access_token":"abc123"},添加一个JSON提取器,变量名填token,JSON表达式填$.access_token,后续请求头中填写Authorization: Bearer ${token}。
断言:确认响应符合预期
录制脚本默认没有断言,压测时即使服务器返回错误码,JMeter也会统计为成功,建议在关键请求下添加“响应断言”,检查响应文本中包含“成功”或“OK”等关键词,还可以设置“持续时间断言”,比如要求响应时间小于3秒,超过即失败。
代理录制脚本与抓包工具导出的脚本有何区别
很多人会问,用Charles或Fiddler抓包后能不能直接转成JMeter脚本?理论上可以,但实际体验差异很大,Charles导出的是HAR格式,JMeter虽然支持通过“工具” -> “导入HAR文件”加载,但导入后的脚本存在两个问题:
- 请求头冗余:HAR中包含大量浏览器自动添加的Headers,比如Host、Connection、Accept-Encoding,这些在JMeter中可能不是必须的,反而增加脚本复杂度。
- 动态参数缺失:HAR是静态快照,Token、时间戳等动态值必须手动添加提取器,工作量与代理录制后处理差不多。
相比之下,代理录制直接生成JMeter原生结构,Script转换时默认过滤了很多无关请求,比如图片、CSS、JS文件,如果你想控制录制范围,还可以在代理服务器面板的“排除模式”中添加正则表达式,比如..png排除图片请求。

代理录制脚本的适用场景与边界
代理录制虽然方便,但并非万能,对于纯API接口的压测,比如后端微服务之间的调用,更适合直接用HTTP请求采样器手写,对于涉及WebSocket、HTTP/2协议的应用,JMeter代理录制支持有限,可能需要借助BlazeMeter插件或手动添加Sampler。
另外要注意,录制脚本不包含思考时间,真实用户操作之间有停顿,而录制脚本是连续点击,压测时吞吐量会虚高,解决办法是在线程组的“调度器”中设置合理的Ramp-Up时间,或者在请求之间添加“固定定时器”模拟用户思考,比如随机暂停1-3秒,用${__Random(1000,3000)}实现。
常见问题解答
为什么jmeter代理服务器录制脚本时浏览器无法上网?
点击启动代理后,浏览器的流量全部指向JMeter监听端口,如果JMeter没有正确监听,或者端口被防火墙拦截,浏览器就会无法加载页面,先检查JMeter代理服务器是否显示“Started”状态,然后用浏览器访问http://localhost:端口不代理的地址测试,最后关闭防火墙或添加放行规则。
录制的脚本回放时响应数据为空怎么办?
响应为空通常是关联失败或请求头缺失,先查看请求的“查看结果树”响应体,如果服务器返回了错误码,根据错误码定位原因,如果返回200但数据为空,检查请求头中的Accept、Content-Type字段是否与录制时一致,特别留意是否有动态的timestamp或sign参数,这类参数必须通过BSF/ JSR223脚本动态生成。
手机端app的https请求能用jmeter代理录制吗?
可以,前提是手机和电脑处于同一局域网,手机WiFi代理设置为电脑的IP和JMeter端口,然后手机浏览器访问http://电脑IP:端口,下载并安装JMeter生成的CA证书,Android 7以上需要把证书安装到系统证书目录,普通用户目录的CA证书无法被应用信任,所以部分App的HTTPS流量仍然录制不到,这种情况需要用虚拟机配合Xposed框架安装证书,或者直接通过抓包工具获取请求信息后手动构造JMeter脚本。
代理录制脚本的价值在于帮你快速跨越从“请求怎么发”到“脚本怎么写”的认知门槛,但它只是起点,真正决定性能测试质量的是你对业务流程的理解、对动态参数的处理以及对压测数据的分析,掌握录制方法后,尽快补充参数化、关联和断言这三项核心技能,才能让录制脚本真正承载起高并发压力测试的任务。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/820150.html


评论列表(2条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于比如的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
读了这篇文章,我深有感触。作者对比如的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!