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

