我希望在for
循环中动态创建和设置gatling场景,以加载测试Web服务。
因此我尝试了以下(缩短):
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)
}
}
如果我尝试运行此模拟,则不会发生任何事情:未启动模拟,也不会出现错误。
所以我的问题是,是否有可能动态创建和设置加特场景。我错过了什么或做错了吗?
为什么我还想动态地进行动作?
我有很多非常类似的测试方法,我想避免一遍又一遍地复制/粘贴相同的场景。
答案 0 :(得分:1)
我自己发现了这个问题。 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)
}