加注内多个命令的加特林循环

时间:2019-06-13 17:26:53

标签: scala gatling scala-gatling

我对此表示歉意,这是我在Gatling for loop inside inject上一个问题的延续。我意识到我没有正确回答我的问题,导致答案有所不同。

我想在这样的注入中有一个for循环,在这里我可以设置要运行 multiple 命令的次数。

scn.inject(
    for (i <- 1 to numTimes){
        atOnceUsers(10),
        nothingFor(10 seconds)
    }
).protocols(httpProtocol)

为我提供了以下答案,如果我只有一个要运行的命令,该方法将非常有用。

scn.inject(
    (1 to numTimes).map(i => atOnceUsers(10))
).protocols(httpProtocol)

但是,我想运行多个命令,但不确定如何执行。我尝试过类似的操作,但出现错误消息Too many arguments for method map(A => B)

scn.inject(
    (1 to numTimes).map(i => atOnceUsers(10), nothingFor(10 seconds))
).protocols(httpProtocol)

我也尝试过此操作,但收到错误No implicits found for parameter evidence

def commands() {
    atOnceUsers(10)
    nothingFor(10 seconds)
}

setUp(
    scn.inject(
        (1 to numTimes).map(i => commands())
    ).protocols(httpProtocol)
)

1 个答案:

答案 0 :(得分:1)

您可以使用List或Seq在循环中将命令分组,但随后需要返回Iterable to inject方法。 flatMap有助于将所有中间Seq合并为一个序列,因此也变得可迭代。

scn.inject( 
  (1 to numTimes).flatMap(i => Seq(atOnceUsers(10), nothingFor(10 seconds)))
)

这将被构造为对象。

res13: io.gatling.core.structure.PopulationBuilder = PopulationBuilder(
  ScenarioBuilder("BasicSimulation", List(io.gatling.core.action.builder.PauseBuilder@60a07d77, io.gatling.http.action.sync.HttpRequestActionBuilder@76795a95)),
  InjectionProfile(
    Vector(
      AtOnceInjection(10),
      NothingForInjection(10 seconds),
      AtOnceInjection(10),
      NothingForInjection(10 seconds),
      AtOnceInjection(10),
      NothingForInjection(10 seconds),
      AtOnceInjection(10),
      NothingForInjection(10 seconds),
      AtOnceInjection(10),
      NothingForInjection(10 seconds)
    )
  ),
  Protocols(Map()),
  List(),
  None
)