如何在Gatling HTTP请求中避免发送空值请求头
Gatling中处理空值请求头的优化方案
不需要拆分CSV和请求,有几种更简洁的方式实现只发送非空值的请求头:
方法一:动态构建过滤后的请求头Map
通过Session处理,先提取属性并过滤空值,再将过滤后的Map用于请求:
val feeder = csv("values.csv").random val req1 = feed(feeder) .exec(session => { // 提取请求头属性,过滤掉空值条目 val validHeaders = Map( "prop_1" -> session("prop_1").as[String], "prop_2" -> session("prop_2").as[String] ).filter { case (_, value) => value.nonEmpty } // 将过滤后的Map存入session session.set("validHeaders", validHeaders) }) .exec( http("Request 1") .get("/endpoint") .headers("#{validHeaders}") )
这种方式统一处理所有请求头,适合需要判断多个字段的场景,逻辑清晰且易于扩展。
方法二:针对单个请求头做条件判断
如果请求头数量不多,可以逐个判断是否添加:
val feeder = csv("values.csv").random val req1 = feed(feeder) .exec( http("Request 1") .get("/endpoint") .header("prop_1", "#{prop_1}") // 仅当prop_2非空时添加该请求头 .doIf(session => session("prop_2").as[String].nonEmpty) { _.header("prop_2", "#{prop_2}") } )
这种方式直观,适合少量请求头的场景,不需要额外的Session处理步骤。
方法三:在Feeder层提前过滤空值
在Feeder读取CSV记录时直接过滤掉空值属性,后续请求直接使用Session中的非空属性:
// 自定义Feeder,过滤每条记录中的空值字段 val feeder = csv("values.csv").random.map(record => { record.filter { case (_, value) => value.nonEmpty } }) val req1 = feed(feeder) .exec( http("Request 1") .get("/endpoint") // 将Session中所有以"prop_"开头的属性作为请求头 .headers(session => session.attributes.filterKeys(_.startsWith("prop_"))) )
注意:如果Session中存在其他非请求头属性,需要调整filterKeys的逻辑,避免误添加无关头信息。
内容的提问来源于stack exchange,提问作者João Pedro Schmitt
相关产品推荐
相关产品推荐

