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

无法通过JSON提取器提取响应ID并在后续请求使用的报错问题

解决JMeter中JSON提取器未替换变量导致的URISyntaxException问题

咱先明确问题根源:你遇到的报错是因为JSON提取器没有成功把id值提取出来,所以删除请求里的${id}根本没被替换成实际的数字(比如返回里的82),而是原封不动留在URL里,导致URL变成了http://dummy.restapiexample.com/api/v1/delete/${id}——这里的${}属于URI里的非法字符,自然就触发了URISyntaxException。

下面一步步来排查和解决:

1. 核对JSON提取器的配置细节

先检查你的JSON提取器是不是配错了,针对你给出的响应内容,正确配置应该是这样的:

  • Reference Name:填id(就是你后续要用的变量名${id})
  • JSON Path Expression:必须填$.data.id(因为返回的JSON里,id是嵌套在data对象里的,路径不能错)
  • Match No.:填1(这里只有一个id结果,取第一个就行)
  • Default Value:可以填NOT_FOUND(方便你排查,如果没提取到变量就会显示这个值)

2. 验证变量是否真的被提取到

给测试计划加一个Debug Sampler,放在JSON提取器所在的请求后面,运行测试后看Debug的响应结果:

  • 如果看到id=82,说明提取成功了;
  • 如果看到id=NOT_FOUND,那肯定是JSON Path写错了,再仔细核对响应的JSON结构:
    {"status":"success","data":{"name":"chirag","salary":"1000","age":"30","id":82}}
    
    确认路径是$.data.id,别写成$.id或者其他错误路径。

3. 检查删除请求的URL配置

确保删除请求的URL是这么写的:
http://dummy.restapiexample.com/api/v1/delete/${id}
注意别给${id}加引号,也别多打空格或者符号,就是直接拼在路径末尾。另外,确认请求的Implementation选的是HttpClient4(JMeter默认的,对变量替换支持最好)。

4. 确认变量的作用域没问题

JSON提取器和删除请求必须在同一个Thread Group里,而且提取器所在的请求要在删除请求之前执行。要是提取器在另一个线程组,变量是跨线程组不共享的,得用User Defined Variables或者Property来传递才行。

5. 用硬编码ID测试一下

先把删除请求的URL改成http://dummy.restapiexample.com/api/v1/delete/82,运行看看能不能正常执行。如果可以,那百分百是变量提取或替换的问题,回到前面的步骤再仔细排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:57:35