动态创建和设置方案



我想在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

最新更新