动态创建和设置方案

时间:2017-06-06 14:28:05

标签: scala gatling

我希望在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)
  }
}

如果我尝试运行此模拟,则不会发生任何事情:未启动模拟,也不会出现错误。

所以我的问题是,是否有可能动态创建和设置加特场景。我错过了什么或做错了吗?

为什么我还想动态地进行动作?

我有很多非常类似的测试方法,我想避免一遍又一遍地复制/粘贴相同的场景。

1 个答案:

答案 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)
}