如何查找View Results Tree中Connect Time最长线程对应的id
可行实现方法整理
下面分3种常见场景给出可直接落地的方案:
方案一:测试执行时自动统计(推荐,无需手动处理结果)
不需要额外插件,仅用JMeter内置组件即可实现自动化统计:
- 给测试的线程组添加 JSR223 后置处理器,作用范围设置为仅作用于你要统计的采样器,填入以下代码:
// 获取当前请求的Connect Time(单位:毫秒) long connectTime = prev.getConnectTime() // 提取响应中的id,以下为JSON响应的提取逻辑,其他格式可自行调整 def response = new groovy.json.JsonSlurper().parse(prev.getResponseData()) def currentId = response.id // 把关联数据存入JMeter全局属性,用线程名做唯一标识 String threadMark = "thread_" + ctx.getThread().getThreadName() props.put(threadMark + "_ct", connectTime) props.put(threadMark + "_id", currentId)
注:如果响应不是JSON格式,可通过
prev.getResponseDataAsString()拿到完整响应字符串,搭配正则/XPath提取id即可。
- 给测试计划添加 JSR223 监听器,设置为测试全部结束后执行,填入以下代码:
long maxCt = -1 def targetId = "" // 遍历所有存储的统计数据找到最大Connect Time对应的id props.entrySet().each { item -> if (item.getKey().endsWith("_ct")) { long currentCt = item.getValue() as long if (currentCt > maxCt) { maxCt = currentCt String idKey = item.getKey().replace("_ct", "_id") targetId = props.get(idKey) } } } // 输出结果到控制台和JMeter日志 log.info("最大Connect Time:{} ms,对应id:{}", maxCt, targetId) println("最大Connect Time:" + maxCt + " ms,对应id:" + targetId)
- 运行测试结束后直接查看控制台或
jmeter.log文件即可拿到结果。
方案二:已完成测试无需重跑的场景
如果已经跑完测试,不想重新执行,可以直接导出结果文件筛选:
- 打开View Results Tree/View Results in Table监听器,点击「保存所有数据」,导出为
jtl格式文件,导出时要勾选保存Connect Time、响应内容、线程名字段 - 用Excel/ WPS表格打开jtl文件,按
Connect Time列做降序排序,第一行就是Connect Time最大的请求 - 找到该行对应的响应内容列,提取其中的id属性即可。
方案三:需要高频重复统计的场景
如果需要多次执行该统计逻辑,可以安装JMeter自定义插件简化操作:
- 安装
Custom JMeter Functions插件后,直接在后置处理器中调用内置最大值统计函数,关联id后直接存入变量,测试结束后即可直接查看结果,不用写Groovy代码。
内容的提问来源于stack exchange,提问作者Shankar PK
相关产品推荐
相关产品推荐

