我想在for
循环中动态创建和设置盖特林方案,以加载测试WebS服务。
因此,我尝试了以下(缩短(:
class RecordedSimulation extends Simulation {
val httpProtocol = http
.baseURL("http://127.0.0.1")
val overallUsers = 1000
val methods: Map[String, Double] = Map(
"FindContact" -> 0.6,
"FindAddress" -> 0.3,
"FindNumber" -> 0.1
)
for ((methodname, probability) <- methods) {
val scen = scenario(methodname)
.exec(http(methodname)
.get("/contactservice")
.queryParam("method", methodname))
setUp(scen.inject(constantUsersPerSec(overallUsers * probability) during (60 seconds))).protocols(httpProtocol)
}
}
如果我尝试运行此模拟,什么也不会发生:没有启动模拟,也不会出现错误。
所以我的问题是甚至可以动态创建和设置盖特林场景。我想念什么还是做错了什么?
为什么我要动态地做它?
好吧,我有很多相似的方法可以测试,我想避免一遍又一遍地复制/粘贴相同的方案。
我自己发现了问题。这个要点使我朝着正确的方向。
似乎您只能调用setUp
方法一次。因此,我将我的方案放在阵列中,并以此arrayseq为参数调用setUp
:
import scala.collection.mutable.ArraySeq
import io.gatling.core.structure.PopulationBuilder
class RecordedSimulation extends Simulation {
val httpProtocol = http
.baseURL("http://127.0.0.1")
val overallUsers = 1000
val methods: Map[String, Double] = Map(
"FindContact" -> 0.6,
"FindAddress" -> 0.3,
"FindNumber" -> 0.1
)
def scnList() = {
var scnList = new ArraySeq[PopulationBuilder](methods.size)
var i = 0
for ((methodname, probability) <- methods) {
var scen = scenario(methodname)
.exec(http(methodname)
.get("/contactservice")
.queryParam("method", methodname))
.inject(constantUsersPerSec(overallUsers * probability) during (60 seconds) randomized)
scnList(i) = scen
i = i + 1
}
scnList
}
setUp(scnList: _*).protocols(httpProtocol)
}
注意:如评论中所述,ArraySeq
在Scala的最新版本中是抽象的。正如KeyLogger所建议的那样,请改用Array
。