JMeter报错:Invalid uri escaped absolute path not valid 问题求助
解决JMeter中PUT请求URI无效的问题
你的问题大概率出在正则表达式提取的内容不符合预期,导致拼接URL时引入了无效字符,或者变量根本没被正确替换。我来一步步帮你排查和解决:
1. 修正正则表达式提取逻辑
你当前用的正则${RNDM}.+"GlossTerm":(.+?)有两个关键问题:
- 没有匹配GlossTerm值周围的双引号,所以提取到的
${x}可能是"2210"(带双引号),而非纯数字2210。带引号的内容直接放到URL里会违反URI规范,即使编码也可能触发格式错误。 - 如果
${RNDM}和GlossTerm之间的匹配逻辑过于宽泛,还可能提取到错误内容,甚至完全匹配失败,导致${x}为空或保留变量名原样,这也会引发URI无效的报错。
修正后的正则表达式:
如果必须保留${RNDM}的前置匹配,应该写成:
${RNDM}.+"GlossTerm":"(.+?)"
如果不需要前置匹配,直接提取GlossTerm的值,更简洁可靠的写法是:
"GlossTerm":"(.+?)"
同时务必确认正则提取器的模板设置为$1$(表示取第一个分组的内容),匹配数字设为1(取第一个匹配项)。
2. 改用JSON Extractor更稳妥
因为你的响应是标准JSON,用JSON Extractor比正则表达式更精准,完全避免正则匹配的歧义问题:
- 在返回JSON的HTTP Request下添加JSON Extractor
- 引用名称填
x - JSON Path Expression填
$.GlossTerm(直接定位到GlossTerm字段的纯值) - 匹配数字设为1
这样提取到的${x}必然是纯的2210,不会带任何多余字符。
3. 验证变量是否正确替换
添加一个Debug Sampler到测试计划中,运行后查看x变量的值:
- 如果
x显示为2210,说明提取逻辑正常 - 如果
x为空、带引号或其他乱码,说明提取规则需要调整
4. 正确配置PUT请求的URL
建议拆分HTTP Request的配置:
- Server Name or IP填
10.12.30.11 - Path填
/abc/test/${x}
而非把整个URL塞进Server Name字段,这样JMeter会更准确地解析路径中的变量。
完成以上步骤后,再运行PUT请求,应该就能解决URI无效的问题了。
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

