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

Gatling压测如何为每个虚拟用户会话调用不同的大体积JSON请求文件

Gatling多静态JSON请求体参数化实现方案

你要的参数化形式完全可以实现,以下是两种常用实现方案:

方案1:基于Feeder实现(推荐,可灵活切换随机/循环策略)

  1. 准备一个CSV配置文件(比如命名为json_files.csv),内容如下:
filePath
magnus/SendMedication_request_2021_1.json
magnus/SendMedication_request_2021_2.json
magnus/SendMedication_request_2021_3.json
...
magnus/SendMedication_request_2021_10.json
  1. 代码中定义Feeder并绑定到场景:
// 随机读取模式
val jsonFeeder = csv("json_files.csv").random()
// 循环顺序读取模式,替换上面一行即可
// val jsonFeeder = csv("json_files.csv").circular()

val scn = scenario("用药推送压测场景")
  .feed(jsonFeeder)
  .exec(http("sendMedication")
    .post("/Patient/$sendMedication")
    .body(ElFileBody("${filePath}"))
    .check(status.is(200))
  )

方案2:直接生成序号拼接路径(无需额外配置文件)

完全符合你提到的类似SendMedication_request_2021(#1).json的参数化需求,直接通过动态生成序号变量拼接路径即可,代码示例:

import java.util.concurrent.ThreadLocalRandom

// 随机生成1-10的文件序号feeder
val seqFeeder = Iterator.continually(
  Map("fileSeq" -> ThreadLocalRandom.current().nextInt(1, 11))
)

// 循环顺序生成序号的feeder,替换上面即可
// val seqFeeder = Iterator.iterate(1)(_ % 10 + 1).map(num => Map("fileSeq" -> num))

val scn = scenario("用药推送压测场景")
  .feed(seqFeeder)
  .exec(http("sendMedication")
    .post("/Patient/$sendMedication")
    .body(ElFileBody("magnus/SendMedication_request_2021_${fileSeq}.json"))
    .check(status.is(200))
  )

注意事项

  • ElFileBody原生支持EL表达式解析路径,所以可以直接通过session变量拼接路径,不需要额外处理文件加载逻辑
  • 如果需要每个虚拟用户全局固定使用同一个文件,可以把feeder的逻辑放到用户初始化阶段,避免同个用户多次请求切换文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:08