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

时间:2019-03-27 06:26:28

标签: json jmeter bad-request

JMeter脚本记录带有三个转义字符(\)的捕获JSON发布请求,然后直接运行而无需进行参数设置,效果很好。 但是,如果我们在请求正文中的任何位置使用任何变量“ $ {xyz}”并在JMeter中运行,则在将请求传递给应用程序时,所有三个斜杠(\)都会变成两个斜杠(\)。 然后,由于应用程序不接受带有两个斜杠的请求,因此该请求失败并显示为“ BAD Request”。

我已经尝试过“ 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},...}

但是没有参数化变量,它可以完美地根据请求使用三个斜杠(\)。

4 个答案:

答案 0 :(得分:0)

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

enter image description here

JMeter发送的文本数据与包含适当位置的三反斜杠的文本数据完全相同。我什至使用Wireshark嗅探器工具捕获了请求,以排除“查看结果树”侦听器的潜在问题

enter image description here

您可能正在遭受某种问题的困扰,该问题已在最新的JMeter版本according to JMeter Best Practices you should always be using the latest version of JMeter中得到解决,因此请确保升级到JMeter 5.1或任何可用的最新版本JMeter Downloads页的版本,您应该可以使用参数化而没有任何问题。

答案 1 :(得分:0)

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

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

将发布的内容是无效的JSON:

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

即使我将所有功能移出请求主体,仅使用变量替换,也会发生相同的事情。

解决方法是对所有内容进行“双逃逸”。含义\" becomes \\"\\\" becomes \\\\\\".

答案 2 :(得分:0)

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

答案 3 :(得分:0)

用 \\\\\ 替换 \\\ 这对我有用。