JMeter 5.0:如何发送带有正文数据的 HTTP 请求?

JMeter 5.0:如何发送带有正文数据的 HTTP 请求?

这可能重复自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) 测试脚本记录器

  1. 准备 JMeter 进行录制。最简单的方法是使用JMeter 模板特征

    • 从 JMeter 的主菜单中选择File -> Templates -> Recording并单击“创建”
    • 打开 HTTP(S) 测试脚本记录器并点击“开始”
  2. 准备 Postman 进行录制

    • 从 Postman 主菜单中选择File -> Settings -> Proxy
    • 勾选HTTPHTTPS协议并将代理服务器设置为127.0.0.1:8888

      在此处输入图片描述

  3. 在 Postman 中执行你的请求

  4. JMeter 应该会捕获它录音控制器。如果一切顺利,您应该能够毫无问题地重播它。

答案2

问题出在 JMeter 的配置中。我使用 HTTP 请求的“参数”选项卡,并将属性放在“名称”选项卡上,将值放在“值”选项卡上。

一位照明用户发表了此文:https://stackoverflow.com/a/51609079/3267330

我不知道为什么我最初的方法对 POST、PATCH 和 PUT 请求有效,而对 GET 请求无效,但现在我只是坚持将所有请求的正文放在“正文数据”选项卡上并创建一个标头,Content-Type: application/json因为这样可行!

相关内容