scala - 动态创建和设置场景

标签 scala gatling

我想在 for 循环中动态创建和设置加特林场景,以对 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)
  }
}

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

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


为什么我要动态地执行它?

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

最佳答案

我自己发现了问题。 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 代替。

关于scala - 动态创建和设置场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392765/

相关文章:

scala - 这在 Scala 中可以为 null 吗?

scala - 比较没有不同类型的

Scala 元组到字符串(使用 mkString)

string - 使用scala在spark中分割由逗号和空格分隔的字符串

performance - 使用加特林将条件放入 HTTP 请求中

ssl - 如何在加特林中关闭 TLSv1.3?

sbt - 在不生成报告的情况下运行 Gatling SBT

java - 使用 JMeter/Java 上下文的 Scala JSR223 脚本

list - 加特林,将值 append 到 session 中的现有列表属性

performance - Akka HTTP REST API 用于提高 Kafka 性能