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

Gatling中JSON Feeder数据无法在gRPC请求setPhone中生效

问题解决:Gatling gRPC payload中Feeder数据无法注入

问题原因

你遇到的核心问题是:SearchRequest.newBuilder()这类构建逻辑是在Gatling场景初始化阶段执行的,此时还没有生成虚拟用户的会话(Session),直接写字符串字面量"${user_phone_number}"只会原样传入setPhone方法,Gatling的EL表达式不会被自动解析。而后续exec步骤中的代码是在运行时(每个虚拟用户请求阶段)执行的,所以能正常从session中读取到值。

解决方案:运行时从Session动态取值

要在gRPC payload构建中获取Feeder数据,需要将payload定义为一个Expression[SearchRequest](即接收Session参数并返回SearchRequest的函数),这样就能在运行时从当前用户的session中提取数据。

修改后的代码如下:

val jsonFeeder = jsonFile("data.json").random

val request: ChainBuilder = {
  feed(jsonFeeder).exec(
    grpc("RequestType")
      .rpc(API.getSearchMethod)
      // 将payload改为接收Session的函数,动态获取值
      .payload(session => 
        SearchRequest.newBuilder()
          .setSearchCriteria(SearchCriteria.newBuilder()
            .setUserData(UserDataCriteria.newBuilder()
              .setPhone(session("user_phone_number").as[String])
              .build())
            .build())
          .build()
      )
      .extract(_.getList.some)(_ exists)
      .extract(_.getCount.some)(_ saveAs "Count")
  )
}

scenario("search for owner personal info phone number")
  .exec(request)
  .exec { session =>
    println(session("user_phone_number").as[String])
    session
  }

补充说明

  • Gatling的EL表达式${xxx}仅在Gatling内置的支持EL解析的上下文(如HTTP请求的body、header参数、模板文件等)中生效,直接在Java/Kotlin的对象构建器中写字符串字面量不会触发解析。
  • 如果你的gRPC payload结构复杂,也可以考虑将其定义为ProtoBuf对应的JSON模板文件,然后使用ElFileBody加载并解析,但函数式的方式更直接灵活,适合简单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:10:30