Я новичок в Scala и пытаюсь написать несколько скриптов для нагрузочного тестирования с использованием Gatling. Я пытаюсь определить повторно используемый метод для отправки нагрузки, поэтому я создал метод ниже:
def startLoad(scenario: Array[ScenarioBuilder]) = {
setUp(
scnGetAuthorizationToken.inject(
atOnceUsers(1)
),
for (i <- 0 until scenario.length) {
scenario(i).inject(
nothingFor(5 seconds),
atOnceUsers(atOnceUserCount)
).throttle(
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps) in (testDuration/2 seconds)),
}
).protocols(httpConf.inferHtmlResources())
.maxDuration(testDuration seconds)
.assertions(
global.responseTime.max.lt(maxResponseTime),
global.successfulRequests.percent.gt(successfulRequests)
)
}
Но компилятор выдает ошибку ниже для оператора for
. У меня такая же ошибка, когда я также использовал «foreach»:
type mismatch; found : Unit required: io.gatling.core.structure.PopulationBuilder
Может кто-нибудь, пожалуйста, помогите мне, как избавиться от этой ошибки?
В общем, я хотел бы получить этот код в следующем формате (несколько строк кода вызывается для разных переменных типа ScenarioBuilder) и, следовательно, пытается придумать метод многократного использования, как определено выше:
def startLoad(scenario: Array[ScenarioBuilder]) = {
setUp(
scnGetAuthorizationToken.inject(
atOnceUsers(1)
),
scenario1.inject(
nothingFor(5 seconds),
atOnceUsers(atOnceUserCount)
).throttle(
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps) in (testDuration/2 seconds)),
scenario2.inject(
nothingFor(5 seconds),
atOnceUsers(atOnceUserCount)
).throttle(
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps) in (testDuration/2 seconds)),
scenario3.inject(
nothingFor(5 seconds),
atOnceUsers(atOnceUserCount)
).throttle(
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps) in (testDuration/2 seconds)),
------
).protocols(httpConf.inferHtmlResources())
.maxDuration(testDuration seconds)
.assertions(
global.responseTime.max.lt(maxResponseTime),
global.successfulRequests.percent.gt(successfulRequests)
)
}
Итак, в основном, я бы хотелось бы повторить приведенные ниже строки кода для каждого элемента массива, который передается в качестве аргумента методу.
inject(
nothingFor(5 seconds),
atOnceUsers(atOnceUserCount)
).throttle(
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps/2) in (testDuration/4 seconds),
reachRps(maxRps) in (testDuration/2 seconds)),