使用JMeter进行Salesforce负载测试时请求返回无效JSON报错排查
问题根因
这个报错本质是JMeter默认的参数处理逻辑改坏了参数内的JSON结构。Salesforce的Aura框架对请求输入格式校验极严,如果你把承载JSON内容的参数放在HTTP请求的Parameters标签页传递,JMeter默认会自动对参数做URL编码,将JSON里的双引号、大括号、冒号等特殊字符转成%xx格式的编码值,甚至会多删多补转义符,最终发到服务端的内容不符合合法JSON结构要求,就会抛出AuraClientInputException异常。
注意排查误区:View Result Tree默认的HTTP视图会自动格式化展示请求内容,经常出现“看着JSON不合法但实际发出去的内容正常”的误判,排查问题时请切换到Raw视图查看实际发出的原始字节流确认问题。
可行修复方案
按优先级依次尝试以下操作,基本能覆盖所有同类场景:
- 关闭参数自动编码:如果要在Parameters标签页传参,找到承载JSON内容的那一行参数,取消勾选该行末尾的
Encode?复选框,禁止JMeter对该JSON值做自动URL编码、转义处理。这是脚本录制场景下最高发的问题——JMeter的HTTP(S)录制器默认会给所有抓到的参数勾选自动编码,录完直接跑必现这个错。 - 切换到Body Data传参:把所有POST请求参数(包括承载JSON的参数)拼接成标准表单格式
key1=value1&key2=value2,整体粘贴到HTTP请求的Body Data标签页,Parameters标签页不要留任何参数。同时在HTTP Header管理器里添加头域Content-Type: application/x-www-form-urlencoded; charset=UTF-8,不要漏写charset配置,避免服务端解析编码出错把合法JSON判为非法。 - 替换HTTP请求实现:在HTTP请求组件的「高级」选项卡下,将Implementation(实现)从默认的
Java改成HttpClient4。Java原生的HTTP客户端会对请求体里的特殊字符做多余的自动转义,HttpClient4实现不会擅自修改你传入的请求内容。 - 排查参数化逻辑:如果JSON内容是通过CSV数据集配置、用户自定义变量等方式参数化传入的,重点检查两个点:
- 引用变量直接写
${变量名}即可,不要在变量外层额外包裹双引号 - CSV文件里存的JSON内容保持原始合法格式就行,不要提前做URL编码、转义处理,多层转义一定会破坏JSON结构
- 引用变量直接写
- 补全基础组件:给测试计划加一个默认配置的HTTP Cookie管理器,Salesforce Aura框架会强校验会话Cookie,Cookie缺失的时候也会抛这种格式类的误导性报错。
验证方法
调整完配置后,在View Result Tree的Raw视图里提取实际发出的JSON参数内容,过一遍JSON格式校验确认结构合法后再跑测试,就能解决这个报错。
内容的提问来源于stack exchange,提问作者uma macharla
相关产品推荐
相关产品推荐

