JMeter脚本记录捕获JSON post请求,使用三个转义字符(\)和字符串,因为它没有参数化,所以工作正常。但是,如果我们在请求体中的任何地方使用任何变量“${xyz}”并在JMeter中运行,则在将请求传递给应用程序时,所有三个斜杠(\)都变成了两个斜杠(\)。然后请求失败,因为应用程序不接受带有两个斜杠的请求。
我已经尝试了“FileToString”方法,但没有成功。
"Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":${Var_ID},...}
}
"Draft":{
"id": 123654656,
"draftdata":{\\\"accCat\\\":\\\"207\\\",\\\"accNumber\\\":\\\"656565
\\\",\\\"id\\\":9876,...}
}
当我传递带有变量的请求时,请求变成如下所示,并且可以在结果树中看到请求体
"Draft":{
"id": 123654656,
"draftdata":{\\"accCat\\":\\"207\\",\\"accNumber\\":\\"656565
\\",\\"id\\":${Var_ID},...}
但是如果没有参数化变量,它可以完美地工作,因为请求带有三个斜杠(\)。
5条答案
按热度按时间cqoc49vn1#
我在JMeter 5.1中遇到了同样的问题。我有一个嵌入在JSON中的JSON。范例:
会发布的是这个,这是无效的JSON:
即使我将所有函数移出请求体,只使用变量替换,也会发生同样的事情。
解决办法是“双重逃避”一切。意思是
\" becomes \\"
和\\\" becomes \\\\\\".
db2dz4w82#
我无法使用纯文本文件中的有效负载和__FileToString()函数重现您的问题
JMeter发送的文本数据完全一样,包括三个反斜杠在适当的地方。我甚至使用Wireshark嗅探器工具捕获请求,以排除View Results Tree侦听器的潜在问题
这可能是你所遭受的一种形式的问题已经在最新的JMeter版本中得到了修复,根据JMeter最佳实践,你应该总是使用最新版本的JMeter,所以一定要升级到JMeter 5.1或任何最新的可用版本从JMeter Downloads页面,你应该能够使用参数化没有任何问题。
qf9go6mv3#
https://bz.apache.org/bugzilla/show_bug.cgi?id=63255我添加了简单的JMX测试,显示了那里的不一致行为。Jmeter 5.3仍然有它。
yeotifhr4#
用\替换\,这对我很有效。
nr7wwzry5#
有同样的问题。我使用在线工具对请求体进行了URL编码,并取消选中JMeter中参数的URL编码复选框,然后用变量替换相关性和参数化值。它的工作没有任何错误。