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

如何在Gatling(Scala)中从Map/JsonPath传值到PebbleStringBody

Gatling + Scala 性能测试传值问题解决方案

核心问题原因

Gatling的会话变量与Pebble模板上下文是独立空间,模板不会自动读取会话中的变量,必须显式将会话变量映射到模板上下文。


具体解决方案

1. 传递Feeder或JsonPath保存的变量到模板

使用PebbleStringBody的重载方法,通过会话对象提取变量并构建模板上下文:

.feed(names)
.exec(http("PerfTest")
  .post("/PerfTest/bulk")
  // 带Session参数的重载方法,显式传递变量到模板
  .body(PebbleStringBody(session => 
    """| [
       |  {% set Iteratecount = 2 %}
       | {% for t in range(1,Iteratecount) %}
       |    {
       |   "name": "{{name}}",
       |   "TestID": "9888988FRFRFDD887887ESES",
       |   "typeId": "9888988FRFRFDD887887ESES",
       |   "statusId": "9888988FRFRFDD887887ESES",
       |   "excludedFromAutoHyperlinking": true
       |    }
       |  {% if loop.last %}
       |  {% else %},{% endif %}
       |  {% endfor %}
       |  ]""".stripMargin,
    // 从会话中提取需要的变量,传入模板上下文
    Map("name" -> session("name").as[String])
  )).asJson
  .check(status.is(200))
)

2. 循环内生成不同随机name(可选优化)

如果需要循环中每个对象使用不同的随机name,可直接在模板中生成,无需依赖feeder:

// 先导入scala.util.Random
import scala.util.Random

// 请求代码
.exec(http("PerfTest")
  .post("/PerfTest/bulk")
  .body(PebbleStringBody(session => 
    """| [
       |  {% set Iteratecount = 2 %}
       | {% for t in range(1,Iteratecount) %}
       |    {
       |   "name": "PerfTest {{ randomAlphanumeric(10) }}",
       |   "TestID": "9888988FRFRFDD887887ESES",
       |   "typeId": "9888988FRFRFDD887887ESES",
       |   "statusId": "9888988FRFRFDD887887ESES",
       |   "excludedFromAutoHyperlinking": true
       |    }
       |  {% if loop.last %}
       |  {% else %},{% endif %}
       |  {% endfor %}
       |  ]""".stripMargin,
    // 将随机生成方法传入模板上下文
    Map("randomAlphanumeric" -> ((length: Int) => Random.alphanumeric.take(length).mkString))
  )).asJson
  .check(status.is(200))
)

内容的提问来源于stack exchange,提问作者RUDRA GANESH SUBBARAYULU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:15:49