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

Gatling中如何正确将List作为函数参数传递?

解决Gatling中Session列表参数传递问题

问题根源

  • 直接传递"${userNames}"是Gatling特定场景(如HTTP请求URL、参数)的字符串插值语法,本质是字符串类型,与produceTestMessage要求的List[String]参数类型不匹配。
  • 从Session中提取自定义类型(如List)的变量,必须通过Session函数(接收Session对象的lambda表达式)来获取。

修正方案

方案1:直接修正Scenario中的调用

将Scenario最后一行的错误调用:

.exec(produceTestMessage("A", "${userNames}"))

替换为通过Session函数提取列表的写法:

.exec(session => produceTestMessage("A", session("userNames").as[List[String]]))

方案2:修正封装的方法

如果需要保留封装方法,修正produceTestMessage方法中的Session取值逻辑(去掉多余的${}):

// 重命名方法避免与原函数冲突
def produceTestMessageWrapper(): ChainBuilder =
  exec(session => produceTestMessage("A", session("userNames").as[List[String]]))

然后在Scenario中调用这个封装方法:

.exec(produceTestMessageWrapper())

额外语法修正

你的类定义存在多余大括号的语法错误,将:

class MyScenario extends KafkaChainBuilder { {

改为:

class MyScenario extends KafkaChainBuilder {

完整修正后代码示例

import io.gatling.core.structure.ChainBuilder
import io.gatling.http.Predef._

class MyScenario extends KafkaChainBuilder {

  def produceTestMessageWrapper(): ChainBuilder =
    exec(session => produceTestMessage("A", session("userNames").as[List[String]]))

  // 设置Session变量的函数
  def setSessionVariables(): ChainBuilder =
    exec(session => session
      .set("userId", "12345")
      .set("userNames", List("john_doe", "jane_doe", "bob_smith")) // 将userNames设为List[String]
    )

  // 在其他链式调用中使用Session变量的函数
  def useSessionVariables(): ChainBuilder =
    exec(http("Example Request")
      .get("/user/${userId}/${userNames(0)}") // 访问列表中的第一个userName
      .check(status.is(200))
    )

  val httpConf = http.baseUrl("http://example.com") // 配置基础URL

  val scn = scenario("My Scenario")
    .exec(setSessionVariables()) // 调用设置Session变量的函数
    .exec(useSessionVariables()) // 调用使用Session变量的函数
    .exec(produceTestMessageWrapper())

  setUp(
    scn.inject(atOnceUsers(1)) // 模拟1个用户
  ).protocols(httpConf)
}

// 原函数定义(假设已正确实现)
def produceTestMessage(prop1: String, propLines: List[String]): ChainBuilder = {
  // 函数实现逻辑
  ???
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:33:11