Цикл Гатлинга для нескольких команд внутри инъекции

Приношу свои извинения за избыточность, это продолжение моего предыдущего вопроса здесь Gatling for loop inside inject . Я понимаю, что неправильно сформулировал свой вопрос, что привело к другому ответу.

Я хочу иметь цикл for внутри подобной инъекции, где я могу указать, сколько раз мне нужно запускать несколько команд.

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)
)

person thatUser    schedule 13.06.2019    source источник


Ответы (1)


Вы можете группировать свои команды в цикле, используя List или Seq, но тогда вам нужно вернуть метод Iterable to inject. flatMap помогает объединить все промежуточные последовательности в одну, и, таким образом, она также становится итерируемой.

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
)
person Alexey Novakov    schedule 13.06.2019