You need to enable JavaScript to run this app. Gatling:登录后循环请求如何从独立随机Feeder拉取数据
优惠活动
大模型
产品
解决方案
定价
更多

Gatling:登录后循环请求如何从独立随机Feeder拉取数据

结论

你提出的整套Gatling场景逻辑完全可以通过原生Feeder机制实现,循环内逐次拉取独立Feeder参数的核心实现非常简单:只需要将feed()操作直接嵌入repeat循环的执行块内部,每次循环触发时都会独立从绑定的Feeder中拉取一条新数据,写入当前虚拟用户的会话上下文,供后续HTTP请求的表达式引用。

修正后的可运行代码实现
// 原有Feeder定义部分保持不变
val userFeeder = csv("users.csv")
// pages.csv需包含对应uri字段,随机模式配置保持不变
val randomPagesFeeder = csv("pages.csv").random

object login {
  val dologin = exec(
    http("login page")
      .get("/login")
      .headers(standardHeaders)
    )
    .exec(
      http("post login form")
        .post("/loginaction")
        .headers(standardHeaders)
        .formParam("loginid", "${loginid}")
        .formParam("password", "${password}")
    )
}

object randompages {
  val visitrandom = repeat(10) {
    // 核心实现:将Feeder拉取操作嵌入循环内部
    feed(randomPagesFeeder)
      .exec(
        http("randompage")
          .get("${uri}") // 引用pages.csv中与列名匹配的参数即可
      )
  }
}

def myload() = {
  feed(userFeeder)
    .exec(login.dologin)
    .exec(randompages.visitrandom)
}

val scn = scenario("My scenario").exec(myload())

setUp(
  scn.inject(rampUsers(userCount).during(userWarmup.toInt seconds))
).protocols(httpProtocol)
关键逻辑说明
  • 全局用户数据拉取:feed(userFeeder)位于流程最外层,每个虚拟用户启动时仅拉取一次账号、密码数据,完成登录后这组用户数据会保留在用户会话中,贯穿后续所有执行步骤。
  • 循环内随机参数拉取:feed(randomPagesFeeder)嵌在repeat循环块内,每一次循环迭代都会触发一次独立的Feeder拉取操作,从配置了随机选择模式的Feeder中抽取一条新的页面URI,写入当前会话供后续请求引用。
  • 注意避坑点:
    • 不要将feed(randomPagesFeeder)放到repeat循环外部,否则只会在循环启动前拉取一次随机页面数据,10次循环都会复用同一个URI,达不到每次请求随机页面的预期效果。
    • Feeder拉取的参数会自动写入会话上下文,同一次迭代中的后续执行块可直接通过${列名}的表达式语法引用,和全局Feeder的使用规则完全一致。
    • 配置了.random模式的Feeder会在所有虚拟用户间共享数据源,每次拉取时随机选取条目、不会按固定顺序遍历,非常适配随机访问类的测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 04:36:06