使用 Apache JMeter 获取产品的 Magento2 400 错误请求

Magento2 400 Bad Request for Get Product with Apache JMeter

我正在尝试使用 JMeter 加载测试 Magento 2 API 的结帐过程。我们期望有 1000 个并发用户。

以下 curl 命令工作正常:

curl -g -X GET "https:/oursite.com/rest/V1/products/25006A/" -H "Authorization: Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp"

但是,当我在 JMeter 的 header 中为相同的 URL 放入相同的授权承载时,它不会 return JSON。相反,它会抛出 400 Bad Request。我还需要什么 header?

这是我的 JMeter 脚本:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Products" enabled="true">
  <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
    <collectionProp name="Arguments.arguments"/>
  </elementProp>
  <stringProp name="HTTPSampler.domain">${varDomain}</stringProp>
  <stringProp name="HTTPSampler.port"></stringProp>
  <stringProp name="HTTPSampler.protocol">https</stringProp>
  <stringProp name="HTTPSampler.contentEncoding"></stringProp>
  <stringProp name="HTTPSampler.path">/rest/V1/products/25006A/</stringProp>
  <stringProp name="HTTPSampler.method">GET</stringProp>
  <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
  <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
  <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
  <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
  <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
  <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
  <stringProp name="HTTPSampler.connect_timeout"></stringProp>
  <stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
  <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
    <collectionProp name="HeaderManager.headers">
      <elementProp name="" elementType="Header">
        <stringProp name="Header.name">Authorization Bearer</stringProp>
        <stringProp name="Header.value">${varToken}</stringProp>
      </elementProp>
      <elementProp name="" elementType="Header">
        <stringProp name="Header.name">content-type</stringProp>
        <stringProp name="Header.value">application/json</stringProp>
      </elementProp>
    </collectionProp>
  </HeaderManager>
  <hashTree/>
</hashTree>

尝试添加 view results tree 侦听器并查看响应消息的内容。通常这会告诉您请求有什么问题。

如果我不得不猜测它是 content-typeAccept header,您需要将其设置为 application/json。

希望对您有所帮助

你的header名字应该是Authorization 只有

Bearer ${varToken}作为放入header

JMeter 5.1 there is a possibility to create a JMeter Test Plan from curl 命令

  1. 从 JMeter 的主菜单中选择 Tools -> Import from cURL
  2. 使用以下命令:

    curl "https:/oursite.com/rest/V1/products/25006A/" -H "Authorization: Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp"
    
  3. 就是这样,JMeter 将生成具有正确值的 HTTP Request sampler and HTTP Header Manager


您脚本的问题是 header 名称应为 Authorization,header 值应为 Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp