You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter使用Recording Controller录制脚本遇socket断开问题及概念咨询

问题解答

一、Recording Controller录制触发socket broken报错解决方案

  • 调整代理请求超时配置:你代码中设置的proxyController.setProxyPauseHTTPSample("10000")代表请求超时时间为10秒,若页面资源加载慢、网络波动都会导致连接超时断开,建议将值调整为30000(30秒)测试。
  • 放开HTTPS域名限制:你仅配置了sslDomains为www.geeksforgeeks.org,如果录制过程中访问了其他HTTPS域名,证书校验不通过会直接断开连接,可先删除该配置项放开所有HTTPS域名的录制权限,验证问题是否解决。
  • 调整Firefox代理配置:在Firefox地址栏输入about:config进入配置页,搜索network.http.proxy.keep-alive将值调整为300,同时将network.http.connection-timeout调整为30000,保持和JMeter代理超时配置一致。
  • 校验证书导入状态:确认JMeter生成的根证书已经正确导入到Firefox的受信任根证书颁发机构列表中,证书未信任会导致HTTPS连接中途被浏览器断开,触发socket broken错误。

二、JMeterTreeModel与JMeterNode定义解释

JMeterTreeModel

JMeterTreeModel是JMeter底层维护测试计划层级结构的核心类,是Swing TreeModel的定制实现,不管是GUI模式还是非GUI代码调用模式,所有测试元素(线程组、控制器、采样器、代理组件等)的父子从属关系、增删改操作都由JMeterTreeModel实例统一管理,是整个测试计划的结构存储容器。

JMeterTreeNode

JMeterTreeNode是JMeterTreeModel中的最小节点单元,每个节点对应一个TestElement接口的实现类实例(比如你代码中的ProxyControl、RecordingController实例都可以作为节点绑定对象)。它除了存储关联的测试元素对象外,还维护了节点的父子关系、GUI模式下的展开/收起状态、节点展示名称等属性。你代码中proxyController.setTarget(node)的作用就是告诉录制代理,把捕获到的所有请求采样器都添加到这个节点绑定的测试元素下。

相关代码(优化排版后)

Scanner sc = new Scanner(System.in);
//  recordingController recordingcontroller=new recordingController("testrecorder",RecordController.class);
//  RecordingController rc= (RecordingController) recordingcontroller.buildTestElement();


RecordingController rc = new RecordingController();
GenericController gc = new GenericController();
rc.initialize();

gc.addTestElement(rc);

LoopController loopController = new LoopController();
loopController.setLoops(1);
loopController.setFirst(true);
loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName());
loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName());
loopController.initialize();

rc.addTestElement(loopController);
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Thread-Group");
threadGroup.setSamplerController(loopController);


ProxyControl proxyController = new ProxyControl();
//  proxyController.setProperty(TestElement.TEST_CLASS, ProxyControl.class.getName());
//  proxyController.setProperty(TestElement.GUI_CLASS, ProxyControlGui.class.getName());
proxyController.setName("Proxy Recorder");
proxyController.setPort(4444);
//  threadGroup.setSamplerController(rc);
//           proxyController.setSamplerTypeName("SAMPLER_TYPE_JAVA_SAMPLER");


TestPlan testPlan = new TestPlan("My_Test_Plan");
testPlan.addTestElement(threadGroup);
testPlan.addTestElement(proxyController);


JMeterTreeModel jtm = new JMeterTreeModel();
proxyController.setNonGuiTreeModel(jtm);
JMeterTreeNode node = new JMeterTreeNode(proxyController,jtm);

//           JMeterTreeNode node=new JMeterTreeNode();
proxyController.setTarget(node);
//        proxyController.setCaptureHttpHeaders(true);
//        proxyController.setUseKeepAlive(true);
//        proxyController.setGroupingMode(4);

proxyController.setCaptureHttpHeaders(true);
proxyController.setProxyPauseHTTPSample("10000");
proxyController.setSamplerFollowRedirects(true);
proxyController.setSslDomains("www.geeksforgeeks.org");
proxyController.startProxy();

内容的提问来源于stack exchange,提问作者Tarun Kumar1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:15:03