我有这个加特林代码(大部分取自这里: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 个语句。
我想要的是这段代码每秒执行尽可能多的语句。我需要进行哪些修改才能使此代码实现这一目标?
看起来使用
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())
}