如何在JMeter HTTP请求Body Data字段中转义XML字符串双引号?
解决JMeter HTTP请求Body Data中XML转义双引号生成合法JSON的问题
问题场景
在JMeter的HTTP请求取样器Body Data字段中,使用__FileToString函数读取XML内容构造JSON:
{"messagePayload":"${__FileToString(${ProjectHome}/Sample Messages/Request.xml)}"}
但XML中的双引号会导致JSON格式非法,尝试直接在函数后调用replace方法未生效:
{"messagePayload":"${__FileToString(${ProjectHome}/Sample Messages/Request.xml).replace('\"', '\\\"')}"}
需要无需单独脚本、直接在Body Data中生效的解决方案。
可行方案
方案1:使用__strReplace函数(JMeter 5.4+支持)
JMeter 5.4及以上版本内置__strReplace函数,可直接在Body Data中完成双引号转义:
{"messagePayload":"${__strReplace(${__FileToString(${ProjectHome}/Sample Messages/Request.xml)},\",\\\",)}"}
参数说明:__strReplace按「待替换字符串、原字符、目标字符、是否忽略大小写(可选)」顺序传参,这里将XML中的"替换为\",注意转义符号的嵌套使用。
方案2:使用__groovy函数(兼容全版本)
借助__groovy函数直接执行Groovy代码完成转义,无需额外脚本元件:
{"messagePayload":"${__groovy(new File(vars.get('ProjectHome') + '/Sample Messages/Request.xml').text.replaceAll('\"', '\\\\\"'),)}"}
说明:
- 通过Groovy原生能力读取XML文件内容
- 用
replaceAll方法将双引号转义为JSON合法的\" vars.get('ProjectHome')直接获取JMeter变量值,避免路径拼接问题
方案3:调整JSON结构简化写法
若XML无换行等特殊格式,可去掉messagePayload的外层双引号,直接让函数输出转义后的字符串作为JSON值:
{"messagePayload":${__groovy(new File(vars.get('ProjectHome') + '/Sample Messages/Request.xml').text.replaceAll('\"', '\\\\\"').replaceAll('\\n', ''),)}}
额外替换换行符是为了避免JSON结构因换行出现语法错误。
内容的提问来源于stack exchange,提问作者mshwf
相关产品推荐
相关产品推荐

