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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:00:57