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

如何实现Gatling模拟中每个请求使用动态随机值?

解决Gatling每次请求生成新随机值的问题

这个问题其实是Gatling新手常踩的坑——因为Gatling的场景定义阶段(模拟启动时)和请求执行阶段(运行时)是完全分开的。你原来的写法里,"myRandomValue: RANDOM-VALUE"会在启动时就被解析成固定字符串,后续重复执行场景自然不会更新随机值。

下面给你两种简单有效的解决方案:

方法1:手动生成会话变量(灵活可控)

先在请求前动态生成随机值并存入Gatling会话,再在请求体中引用这个会话变量。这样每次执行请求时都会重新生成新值:

val postRandomValue = scenario("Post Random Value") 
  // 每次请求前生成新的随机值
  .exec(session => {
    // 这里可以自定义随机逻辑:比如随机整数、UUID、字符串等
    val newRandomValue = scala.util.Random.nextInt(1000) // 生成0-999的随机整数
    // 或者用UUID生成唯一字符串:java.util.UUID.randomUUID().toString()
    session.set("dynamicRandomVal", newRandomValue)
  })
  .exec( 
    http("POST ShipmentList") 
      .post("http://localhost:8080/endpoint")
      .headers(Headers.header) 
      // 用${}引用会话中的变量
      .body(StringBody("myRandomValue: ${dynamicRandomVal}"))
  )

方法2:使用Gatling内置表达式(简洁高效)

Gatling自带了一套表达式语言(EL),里面有很多现成的随机函数,这些函数会在每次请求执行时动态计算,不用手动处理会话:

val postRandomValue = scenario("Post Random Value") 
  .exec( 
    http("POST ShipmentList") 
      .post("http://localhost:8080/endpoint")
      .headers(Headers.header) 
      // 直接用内置随机函数,每次请求都会生成新值
      .body(StringBody("myRandomValue: ${randomInt(0, 1000)}"))
  )

常用的内置随机函数还有:

  • ${randomLong(min, max)}:生成随机长整数
  • ${randomUUID}:生成唯一UUID字符串
  • ${randomString(length)}:生成指定长度的随机字符串

核心原理总结

一定要区分Gatling的两个阶段:

  • 构建阶段:模拟启动时执行,用来定义场景结构、静态配置等,此时代码只会运行一次
  • 运行阶段:模拟运行时,每个虚拟用户执行场景步骤时都会重复运行,动态逻辑(比如随机值生成)必须放在这个阶段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:47:44