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

Gatling使用feeder取10条数据重复发请求报嵌套属性错误如何解决

问题根因

Gatling内置的表达式语言(EL)不支持嵌套属性解析,你代码中写的${product_code${counter}}属于嵌套语法,会直接触发nested attribute definition is not allowed报错,无法通过EL本身实现动态拼接属性名的逻辑。

修复方案

你一次性读取10条feeder数据的逻辑本身没问题,只需要把动态拼接属性名的逻辑从EL层移到Session处理层,不要在URL路径里写嵌套EL即可,修正后的代码如下:

feed(products, 10)
  .repeat(10, "index") {
    exec(session => {
      // repeat内置的index从0开始计数,+1后对应feeder批量写入的product_code1~product_code10属性
      val counter = session("index").as[Int] + 1
      // 直接通过Scala代码拼接属性名,取出对应商品编码存入session
      val targetProductCode = session(s"product_code$counter").as[String]
      session.set("targetProductCode", targetProductCode).set("counter", counter)
    })
    .exec(productIdsRequest())
  }

private def productIdsRequest() = {
  http("ProductId${counter}")
    // 直接取提前算好的商品编码,不需要嵌套EL
    .get(path + "products/${targetProductCode}")
    .check(jsonPath("$..code").count.gt(2))
}

更简洁的可选写法

如果没有强制要求必须一次性批量读取10条feeder数据,完全可以把feeder读取放到循环内部,每次循环读取1条商品数据,不需要手动处理下标拼接,代码更简洁不易出错:

repeat(10) {
  // 每次循环从feeder取1条数据,自动将product_code注入session
  feed(products)
    .exec(productIdsRequestSimple())
}

private def productIdsRequestSimple() = {
  http("Get Product")
    .get(path + "products/${product_code}")
    .check(jsonPath("$..code").count.gt(2))
}

两种写法最终实现的效果完全一致:发起10次请求,每次请求对应1条feeder中的商品数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:12:13