使用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
相关产品推荐
相关产品推荐

