JMeter - BlazeMeter 保存的参数化请求与 cURL 生成的 POST 正文的请求不同
Posted
技术标签:
【中文标题】JMeter - BlazeMeter 保存的参数化请求与 cURL 生成的 POST 正文的请求不同【英文标题】:JMeter - Parameterized request saved by BlazeMeter not behaving like request with POST body generated by cURL 【发布时间】:2022-01-01 14:28:51 【问题描述】:使用 Blazemeter 的 Chrome 插件,我将 POST 请求保存到 JMeter。
请求被保存为参数化的 POST 请求:
POST https://qa2s.xxxx.com/dcs/public/facade.aspx
POST data:
show_unclosed=1&search_transaction_id=&with_cashless_external=0&user_preset_id=3&
responseType=json&num_of_rows=200&with_cash=0&rs%3AClearSession=true&
action=Dynamic_Transactions_Monitor&model=operations%2FdynamicTransactionsMonitorMega&
is_Legend=1&actor_id=2001186292&show_sales=1&time_period=47
当我运行这个请求时,我得到了 200 响应,但响应内容不正确,基于浏览器调试。响应应该是实体的 JSON 集合。
但是,当我将此请求保存为 cURL 命令并将其导入 JMeter 时,它以参数化 URL 的形式出现,并且它的响应符合预期。
https://qa2s.xxxx.com/dcs/public/facade.aspx?responseType=json&
model=operations/dynamicTransactionsMonitorMega&
action=Dynamic_Transactions_Monitor&&num_of_rows=200&show_unclosed=1&
show_sales=1&with_cash=0&with_cashless_external=0&is_Legend=1&
rs:ClearSession=true&time_period=41&search_transaction_id=&user_preset_id=3
这是为什么?
我希望前一个请求像后一个请求一样给出响应。
在 JMeter 中更易于阅读。确实没有必要将 POST-body 请求转换为参数化 URL。
一些附加信息
获得第一个返回 JSON 对象的请求的唯一方法是将 model 和 action 参数附加到 URL,将其他所有内容作为参数保留在正文中。
原来的 URL 似乎只是将您带到报告页面;您需要在 URL 中指定模型和操作才能实际检索报告数据。
所以我认为这是插件的问题(正如@Dmitri T 建议的那样)。
我说的对吗?
【问题讨论】:
【参考方案1】:我的期望是,您会收到不同的响应,因为您发送的请求不同。
例如:
model
参数:
operations/dynamicTransactionsMonitorMega
对于卷曲:operations/yyyy
action
参数:
zzzzz
对于卷曲:Dynamic_Transactions_Monitor
time_period
参数:
47
对于卷曲:41
我相信,如果您发送相同的请求,您应该会得到相同的响应,因此请交叉检查从浏览器发送的请求与 JMeter 生成的请求,请求必须完全相同(除了需要关联的动态参数),最好使用外部嗅探器工具,如Wireshark 或Fiddler。如果您修改 JMeter 配置,使请求相同,您将得到相同的响应。
如果您认为 BlazeMeter Chrome 扩展程序生成了不正确的请求定义,通知BlazeMeter Support 是有意义的。
【讨论】:
对于误导我深表歉意 - 我试图编辑信息。我将编辑原始帖子,以便清楚。以上是关于JMeter - BlazeMeter 保存的参数化请求与 cURL 生成的 POST 正文的请求不同的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Blazemeter 测试中通过 Jenkins 在 .jmx 文件中设置参数
JMeter 的 Blazemeter Oauth 插件不再支持使用 OAuth 1.0 进行身份验证?