如何在JMeter的JSON Path表达式中传递线程编号?
解决JMeter中根据线程编号获取对应位置ID的问题
问题原因
JMeter的JSONPath提取器默认不会自动解析表达式内的变量引用,你写的${__threadNum}会被当作字符串字面量处理,而非实际的线程编号数值。
可行解决方案
方法1:用__eval函数解析变量
修改JSONPath表达式为:${__eval($..id[${__threadNum}])}__eval函数会先解析内部的
${__threadNum}变量,再执行最终的JSONPath查询逻辑。方法2:提前存储线程编号变量
- 添加「用户定义的变量」元件,定义变量名如
threadId,值设为${__threadNum} - 在JSONPath提取器中使用:
$..id[${threadId}]通过提前解析变量,避免直接在JSONPath表达式中嵌套变量引用的问题。
- 添加「用户定义的变量」元件,定义变量名如
方法3:用JSR223提取器实现逻辑
如果上述方法不生效,可改用JSR223提取器编写Groovy代码:def json = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString()) def ids = json.id // 根据实际JSON结构调整路径 def threadNum = ctx.getThreadNum() vars.put("targetId", ids[threadNum - 1].toString()) // 注意:JSON数组下标从0开始,线程编号从1开始需减1
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

