![JMeter 5.0:如何发送带有正文数据的 HTTP 请求?](https://linux22.com/image/1577954/JMeter%205.0%EF%BC%9A%E5%A6%82%E4%BD%95%E5%8F%91%E9%80%81%E5%B8%A6%E6%9C%89%E6%AD%A3%E6%96%87%E6%95%B0%E6%8D%AE%E7%9A%84%20HTTP%20%E8%AF%B7%E6%B1%82%EF%BC%9F.png)
这可能重复自https://stackoverflow.com/questions/40514004/jmeter-how-to-send-get-request-with-body-data
但是尽管提出该问题的人声称该问题已在 JMeter 3.1 版本中得到解决,但它在 JMeter 5.0 上并没有像我预期的那样工作。
我还尝试在与 HTTP 请求采样器关联的 HTTP 请求管理器上设置 Content-Type:application/x-www-form-urlencoded,但主体仅在 POST 请求中传递。我的应用程序从 Postman 接收良好,但从 JMeter 接收不佳。
编辑:这是 Postman 生成的代码片段:
GET /api/patients/5c1e35351f68df799c0ad864/cases HTTP/1.1 Host: localhost:3080 Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InJ1YmVubWFycXVlczkxQGdtYWlsLmNvbSIsInVzZXJJZCI6IjVjMjNiZTJkNjU0YjIwMzhiNDQwY2ViZiIsImlhdCI6MTU0NjAxMjQ2NSwiZXhwIjoxNTQ2MDE2MDY1fQ.LqCV9eHByxQ0ubDIcJOwR0WGGXfMw49X0VLLurjbseM cache-control: no-cache Postman-Token: 2d8f4f4c-4ec6-428e-bf1a-cafd27fa98ed { "caseName": "TestName" }------WebKitFormBoundary7MA4YWxkTrZu0gW--
答案1
到底什么不起作用?例如,给定以下 Elastic 搜索有效负载:
{
"index": {
"_index": "shakespeare",
"_type": "act",
"_id": 0
}
}
{
"line_id": 1,
"play_name": "Henry IV",
"speech_number": "",
"line_number": "",
"speaker": "",
"text_entry": "ACT I"
}
当我执行以下 GET 请求时:
{
"query": {
"match": {
"play_name": "Henry IV"
}
}
}
我可以看到请求主体与我在查看结果树听众
响应包含所有相关的搜索结果:
因此,我建议使用嗅探器工具来比较 Postman 和 JMeter 发送的请求,例如Fiddler或者Wireshark. 很可能是 JMeter 配置有错误,可能与错误有关内容类型
还要注意的是,可以使用 JMeter 的HTTP(S) 测试脚本记录器
答案2
问题出在 JMeter 的配置中。我使用 HTTP 请求的“参数”选项卡,并将属性放在“名称”选项卡上,将值放在“值”选项卡上。
一位照明用户发表了此文:https://stackoverflow.com/a/51609079/3267330。
我不知道为什么我最初的方法对 POST、PATCH 和 PUT 请求有效,而对 GET 请求无效,但现在我只是坚持将所有请求的正文放在“正文数据”选项卡上并创建一个标头,Content-Type: application/json
因为这样可行!