参数化从JSON POST请求中删除转义字符,并在JMeter中给出错误请求400

rkkpypqq  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(117)

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},...}

但是如果没有参数化变量,它可以完美地工作,因为请求带有三个斜杠(\)。

cqoc49vn

cqoc49vn1#

我在JMeter 5.1中遇到了同样的问题。我有一个嵌入在JSON中的JSON。范例:

{"messages":"{\"outputs\":[\"{\\\"objectstatus\\\":\\\"${__Random(100,200,)}\\\"}\"]}"}

会发布的是这个,这是无效的JSON:

{"messages":"{\"outputs\":[\"{\\"objectstatus\\":\\"152\\"}\"]}

即使我将所有函数移出请求体,只使用变量替换,也会发生同样的事情。
解决办法是“双重逃避”一切。意思是\" becomes \\"\\\" becomes \\\\\\".

db2dz4w8

db2dz4w82#

我无法使用纯文本文件中的有效负载和__FileToString()函数重现您的问题

JMeter发送的文本数据完全一样,包括三个反斜杠在适当的地方。我甚至使用Wireshark嗅探器工具捕获请求,以排除View Results Tree侦听器的潜在问题

这可能是你所遭受的一种形式的问题已经在最新的JMeter版本中得到了修复,根据JMeter最佳实践,你应该总是使用最新版本的JMeter,所以一定要升级到JMeter 5.1或任何最新的可用版本从JMeter Downloads页面,你应该能够使用参数化没有任何问题。

qf9go6mv

qf9go6mv3#

https://bz.apache.org/bugzilla/show_bug.cgi?id=63255我添加了简单的JMX测试,显示了那里的不一致行为。Jmeter 5.3仍然有它。

yeotifhr

yeotifhr4#

用\替换\,这对我很有效。

nr7wwzry

nr7wwzry5#

有同样的问题。我使用在线工具对请求体进行了URL编码,并取消选中JMeter中参数的URL编码复选框,然后用变量替换相关性和参数化值。它的工作没有任何错误。

相关问题