使用 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-type
或 Accept
header,您需要将其设置为 application/json。
希望对您有所帮助
你的header名字应该是Authorization
只有
将Bearer ${varToken}
作为值放入header
自 JMeter 5.1 there is a possibility to create a JMeter Test Plan from curl 命令
- 从 JMeter 的主菜单中选择
Tools -> Import from cURL
使用以下命令:
curl "https:/oursite.com/rest/V1/products/25006A/" -H "Authorization: Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp"
就是这样,JMeter 将生成具有正确值的 HTTP Request sampler and HTTP Header Manager
您脚本的问题是 header 名称应为 Authorization
,header 值应为 Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp
我正在尝试使用 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-type
或 Accept
header,您需要将其设置为 application/json。
希望对您有所帮助
你的header名字应该是Authorization
只有
将Bearer ${varToken}
作为值放入header
自 JMeter 5.1 there is a possibility to create a JMeter Test Plan from curl 命令
- 从 JMeter 的主菜单中选择
Tools -> Import from cURL
使用以下命令:
curl "https:/oursite.com/rest/V1/products/25006A/" -H "Authorization: Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp"
就是这样,JMeter 将生成具有正确值的 HTTP Request sampler and HTTP Header Manager
您脚本的问题是 header 名称应为 Authorization
,header 值应为 Bearer tm2yd2908exmy0ntoq9esvr5gqoh7upp