动态创建和设置场景
Dynamically create and setup scenarios
我想在 for
循环中动态创建和设置 gatling 场景以对网络服务进行负载测试。
因此我尝试了以下(缩写):
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)
}
}
如果我尝试运行这个模拟没有任何反应:没有启动模拟,也没有出现错误。
所以我的问题是是否有可能动态创建和设置加特林场景。我是漏了什么还是做错了什么?
为什么我要动态地做呢?
好吧,我有很多非常相似的方法要测试,我想避免 copy/pasting 一遍又一遍地出现相同的情况。
我自己发现了问题。 This gist 让我走对了方向。
看来您只能调用setUp
方法一次。所以我将我的场景放在 ArraySeq 中,并使用此 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 中是抽象的。正如键盘记录器所建议的那样,请改用 Array
。
我想在 for
循环中动态创建和设置 gatling 场景以对网络服务进行负载测试。
因此我尝试了以下(缩写):
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)
}
}
如果我尝试运行这个模拟没有任何反应:没有启动模拟,也没有出现错误。
所以我的问题是是否有可能动态创建和设置加特林场景。我是漏了什么还是做错了什么?
为什么我要动态地做呢?
好吧,我有很多非常相似的方法要测试,我想避免 copy/pasting 一遍又一遍地出现相同的情况。
我自己发现了问题。 This gist 让我走对了方向。
看来您只能调用setUp
方法一次。所以我将我的场景放在 ArraySeq 中,并使用此 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 中是抽象的。正如键盘记录器所建议的那样,请改用 Array
。