如何让加特林发送尽可能多的请求?

问题描述 投票:0回答:1

我有这个加特林代码(大部分取自这里:https://github.com/gadling-cql/GadlingCql):

val feeder = Iterator.continually(
    Map(
      "id" -> serialGen(),
      "randomString" -> random.nextString(20),
      "randomNum" -> jrandom.nextLong(),
      "randomMap" -> maps(jrandom.nextInt(maps.size))
    ))

  val scn = scenario("Two statements").repeat(1) { 
    feed(feeder)
      .exec(cql("simple SELECT")
        .execute("SELECT * FROM test_table WHERE id = ${randomNum}")
        .consistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
        .check(rowCount.satisfies(a => a >= 0)))
      .exec(cql("prepared INSERT")
        .execute(prepared)
        .withParams("${id}", "${randomMap}", "${randomString}")
        .consistencyLevel(ConsistencyLevel.LOCAL_QUORUM))
  }

  setUp(scn.inject(
    rampUsersPerSec(1) to 1 during (1.minute)
  )).protocols(cqlConfig)

repeat(1)
只会导致每个用户每秒执行 2 个语句(简单的 SELECT 和准备好的 INSERT,如上所定义)。如果我这样做
repeat(300)
每个用户每秒将有 600 个语句。

我想要的是这段代码每秒执行尽可能多的语句。我需要进行哪些修改才能使此代码实现这一目标?

scala gatling
1个回答
0
投票

看起来使用

doWhile
而不是
repeat
可以实现这一点:

 val feeder: Iterator[Map[String, Any]] = Iterator.continually(
    Map(
      "id" -> serialGen(),
      "randomString" -> random.nextString(20),
      "randomNum" -> jrandom.nextLong(),
      "randomMap" -> maps(jrandom.nextInt(maps.size))
    ))

  val scn = scenario("Two statements").doWhile(true) {
    feed(feeder)
      .exec(cql("simple SELECT")
        .execute("SELECT * FROM test_table WHERE id = ${id}")
        .consistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
        .check(rowCount.satisfies(a => a > 0)))
      .exec(cql("prepared INSERT")
        .execute(prepared)
        .withParams("${id}", "${randomMap}", "${randomString}")
        .consistencyLevel(ConsistencyLevel.LOCAL_QUORUM))
  }

  setUp(scn.inject(
    atOnceUsers(10)
  ))
  .protocols(cqlConfig)
  .maxDuration(30.seconds)

  after(session.close())
}
© www.soinside.com 2019 - 2024. All rights reserved.