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

Gatling从CSV读取JSON请求体报400错误求助

解决Gatling中CSV转义JSON导致请求体格式错误的问题

看起来你遇到的问题根源在于CSV文件里的JSON内容被过度转义了——里面的"是HTML实体的双引号转义,Gatling读取后会直接把这些转义字符当成请求体的一部分发送,导致后端收到的JSON格式完全错误,自然返回400状态码。

我给你两种可行的解决方案,你可以根据情况选择:

方案一:修复CSV文件格式

最直接的方式是调整CSV里的内容,让它符合CSV的字符串转义规则。CSV中如果字符串包含双引号,需要用双引号包裹整个字段,并且内部的双引号要写成两个连续的双引号。修改后的CSV内容应该是这样:

Id,searchCriterion
18817,"{""basicSearchCriteria"":{""name"":{""text"":""Kas""}}}"

这样Gatling从feeder读取searchCriterion时,会自动把连续的双引号解析成单个双引号,得到的就是正确的JSON字符串,你的原有代码不需要做任何修改就能正常运行。

方案二:在代码中处理转义字符

如果没办法修改CSV文件,那就在Gatling的请求体里把"替换成实际的双引号。你只需要把原来的StringBody部分改成这样:

.body(StringBody("""${searchCriterion.replaceAll(""", "\"")}"""))

修改后的完整场景代码如下:

val feeder = csv("search.csv")
object SearchWithCriteria {
 var request = feed(feeder)
 .exec(
 http("POST with criteria page 1")
 .post("api/resources?pageNumber=1&pageSize=10&id=${Id}")
 .body(StringBody("""${searchCriterion.replaceAll(""", "\"")}"""))
 .check(status.is(200))
 )
}
val basicSearch = scenario("Basic search (no search criteria)").exec(SearchWithCriteria.request)
setUp(
 basicSearch.inject(rampUsers(1) during (1 seconds))
).protocols(httpProtocol)

这个方法会在发送请求前,把读取到的searchCriterion里的所有"替换成双引号,生成符合要求的JSON请求体。

你可以先试试方案一,因为修改CSV格式是最稳妥的方式,避免后续代码维护的麻烦。如果方案一不可行,再用方案二的代码修改方式,应该就能解决400状态码的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:17:56