You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gatling编写POST场景时遇400错误,请求解决方法

解决Gatling POST请求添加电脑时的400错误

嘿,我帮你揪出这个400错误的根源啦!你遇到的问题大概率是**company参数传错了值**——这个测试网站的company字段是下拉选择框,后台实际接收的是公司对应的ID数字,而不是显示的名称(比如"Sony")。

问题分析

打开目标页面http://computer-database.gatling.io/computers/new,查看页面的HTML源码,你会发现下拉框的option标签是类似这样的:

<option value="1">Sony</option>

也就是说,当你手动选择Sony提交时,实际传给后台的参数是company=1,而不是company=Sony,这就是导致400参数错误的核心原因。

修复后的代码示例

你可以直接修改formParam里的company值为对应的ID,或者用formParamMap的写法:

单个formParam写法

var httpProtocol = http.baseUrl("http://computer-database.gatling.io")
var scenarioBuilder = scenario("Adding Computer")
  .exec(
    http("Adding a Computer")
      .post("/computers/new")
      .formParam("name","HP")
      .formParam("introduced","2019-01-01")
      .formParam("discontinued","2019-02-02")
      .formParam("company","1") // 这里改成Sony对应的ID
  )
setUp(
  scenarioBuilder.inject(atOnceUsers(1))
    .protocols(httpProtocol)
)

formParamMap写法

var httpProtocol = http.baseUrl("http://computer-database.gatling.io")
var scenarioBuilder = scenario("Adding Computer")
  .exec(
    http("Adding a Computer")
      .post("/computers/new")
      .formParamMap(Map(
        "name" -> "HP",
        "introduced" -> "2019-01-01",
        "discontinued" -> "2019-02-02",
        "company" -> "1" // 同样替换为对应ID
      ))
  )
setUp(
  scenarioBuilder.inject(atOnceUsers(1))
    .protocols(httpProtocol)
)

额外验证小技巧

以后遇到这类表单提交的问题,你可以用浏览器的开发者工具(F12)抓包,查看正常提交时的参数内容,对比自己的代码传参,就能快速定位问题啦!

内容的提问来源于stack exchange,提问作者OthK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:17:53