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

如何在Gatling中从CSV Feeder取值并传递给请求头生成函数?

解决方案:Gatling中Session变量在Scala函数参数中无法解析的问题

问题原因

Gatling的${xxx}字符串插值仅在Gatling DSL方法(如get、post)的参数中生效,这类方法会自动从Session中解析变量。但当你将"${endpoint}"作为普通字符串传递给自定义Scala函数(如create_header)时,它只是一个普通字符串,不会触发Session变量解析,因此函数接收到的是字面量"${endpoint}"而非CSV中的实际值。

修复方案

你需要显式从Session中提取endpoint的值,再传递给create_header函数。以下是两种简洁的实现方式:

方式1:直接在headers方法中传入Session处理函数

val scn = scenario("Test").exitBlockOnFail{
    feed(csvFeeder)
    .group("Multiple tests") {
      exec(http("Multiple tests")
        .get("${endpoint}" + request_params)
        // 显式从Session中获取endpoint值,再调用生成header的函数
        .headers(session => utils.HeaderUtils.create_header(session("endpoint").as[String]).toMap)
        .check(status.is(200)))
    }.pause(1.seconds)
}

方式2:提前提取变量并存入Session(适合需要复用header的场景)

val scn = scenario("Test").exitBlockOnFail{
    feed(csvFeeder)
    .group("Multiple tests") {
      // 先从Session取出endpoint,生成header后存入Session
      exec(session => {
        val endpoint = session("endpoint").as[String]
        val requestHeaders = utils.HeaderUtils.create_header(endpoint).toMap
        session.set("requestHeaders", requestHeaders)
      })
      .exec(http("Multiple tests")
        .get("${endpoint}" + request_params)
        // 从Session中取出预先生成的header
        .headers("${requestHeaders}")
        .check(status.is(200)))
    }.pause(1.seconds)
}

关键说明

  • session("endpoint").as[String]:从Gatling的Session中提取名为endpoint的变量,并转换为String类型,这是获取Session变量的标准方式。
  • headers方法支持接收两种参数:一是Map[String, String],二是Session => Map[String, String]类型的函数,后者允许你动态基于Session生成header。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:17