POST 在 JMeter 中给出 "Unrecognized token 'json'"

POST in JMeter gives "Unrecognized token 'json'"

我不明白为什么会出现此错误:

"Failed to parse request body as JSON resource. Error was: Failed to parse JSON encoded FHIR content: Unrecognized token 'json': was expecting ('true', 'false' or 'null')\n at [Source: UNKNOWN; line: 3, column: 29]"

FHIR 是使用的标准。我还使用与 Postman 一起使用的有效 JSON 进行了测试,因此我认为实际的 JSON 不是问题所在。 我不确定我是否正确,但 JMeter 似乎从某处添加了 'json',因为错误表明令牌 'json' 是意外的。这是查看结果树中的请求 > 请求 body 选项卡。

这只是一个测试 JSON,但我得到了与在 Postman 中工作的 JSON body 相同的响应(并且我的格式正确以确保)。我指定了 Content-Type header。我根本不明白令牌 'json' 的来源,因为我的 json 本身不包含令牌。 body 是否知道 JMeter 是否向请求添加了一些内容?

您发送的负载不正确,它应该如下所示:

{
     "test" : "X"
}

你正在发送

{
     "test" : "X"
}json

 ^^^^ this guy is causing the issue

JMeter 不会向请求添加任何内容,您需要仔细检查您的配置,即 JMeter jmx scripts 是“正常”XML 文件,因此您可以使用您喜欢的文本编辑器进行查找这个json

如果您能够使用 Postman 发送有效请求,您应该能够使用 JMeter 的 HTTP(S) Test Script Recorder, just configure Postman to use JMeter as the proxy and run your request/collection - JMeter will capture the requests and generate relevant HTTP Request 可以成功重放的采样器来记录它。

更多信息:How to Convert Your Postman API Tests to JMeter for Scaling

如果你在 HTTP Request Defaults 中添加一个默认参数(在我的例子中是 _format=json),它会把它添加到 POST 的正文中。

我通过使用以下代码添加 BeanShell 预处理器来修复此问题:

if(sampler.getMethod().equalsIgnoreCase("get")){ sampler.addArgument("_format", "json"); }