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

Gatling多虚拟用户场景下如何分配每次迭代的唯一测试数据

Gatling 多虚拟用户分片分配唯一测试数据方案

实现逻辑

通过Gatling内置的全局唯一userId定位每个虚拟用户的专属数据分片,每个用户在自己的分片范围内按迭代顺序取数,即可保证所有用户各次迭代拿到的数据完全唯一,且完全匹配你要求的分配规则。

代码实现(Scala DSL示例)

前置准备

假设你的测试数据存放在test_data.csv中,示例格式如下:

testData
data1
data2
data3
data4
data5
data6
data7
data8
data9

核心代码

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class UniqueDataTest extends Simulation {
  // 加载全量测试数据,跳过表头转为序列存储
  val allTestData = csv("test_data.csv").readRecords.toSeq
  // 配置参数,可根据实际需求修改
  val totalUserCount = 3 // 虚拟用户数
  val perUserIteration = 3 // 每个用户迭代次数
  val perUserDataCount = perUserIteration // 每个用户分配的测试数据条数

  val scn = scenario("唯一数据分配测试场景")
    // 初始化用户专属分片信息
    .exec(session => {
      val currentUserId = session.userId.toInt
      // 计算当前用户的分片起始索引
      val userDataStartIndex = currentUserId * perUserDataCount
      session
        .set("userDataStartIndex", userDataStartIndex)
        .set("currentIterOffset", 0)
    })
    // 每个用户迭代对应次数,每次取自己分片内的下一条数据
    .repeat(perUserIteration) {
      exec(session => {
        val startIndex = session("userDataStartIndex").as[Int]
        val offset = session("currentIterOffset").as[Int]
        // 取对应位置的测试数据,将csv列自动注入session
        val currentRow = allTestData(startIndex + offset)
        session
          .setAll(currentRow)
          .set("currentIterOffset", offset + 1)
      })
      // 替换为你实际的业务请求逻辑
      .exec(http("业务测试请求")
        .post("/your/api/path")
        .body(StringBody("""{"param": "${testData}"}"""))
        .asJson
      )
    }

  setUp(
    scn.inject(atOnceUsers(totalUserCount))
  )
}

分配规则验证

以你的示例参数(3用户、9条数据)为例,最终分配结果和你要求的完全一致:

  • 用户ID 0 → 对应数据行1、2、3
  • 用户ID 1 → 对应数据行4、5、6
  • 用户ID 2 → 对应数据行7、8、9

注意事项

  • 需提前保证测试数据总条数 = 虚拟用户数 × 单用户迭代次数,避免数组越界,如有特殊需求可自行添加取模、空值兜底逻辑
  • 若使用Java DSL实现,逻辑完全一致,仅需替换为对应Java语法即可
  • 不要使用Gatling默认的queue/shuffle等共享feeder策略,该类策略是所有用户共享遍历数据,无法实现严格的分片隔离

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:04