加特林:多次动态设置一个场景

时间:2018-08-10 14:19:39

标签: scala gatling

我有一个场景,其中包含4个不同的API调用,它们始终保持不变。 我正在尝试创建一个并行压力测试,在此情况下,我希望首先以10%,然后是20%,30%...等最大用户数运行同一场景。

我遇到了一个问题,即我无法多次设置相同的方案。

但是我还需要动态设置,具体取决于脚本中的可配置变量 这就是造成问题的原因,我希望能够轻松配置它以运行例如10%,50%和100%。

这就是我到目前为止(缩短了,atOnceUser和nothingFor从通过 bla(i)迭代的配置中动态获取输入)

def scnList() = {
    var scnList = new ArraySeq[PopulationBuilder](someArray.length)
    var i = 0
    for (i <- 0 until someArray.length) {
      var scen = myscenario
        .inject(atOnceUsers((bla(i)), nothingFor(blabla(i) minutes))
      scnList(i) = scen
    }
    scnList
}

setUp(scnList: _*).protocols(httpConf)
    .assertions(global.successfulRequests.percent.gt(99),
    forAll.responseTime.max.lt(5000)
)

1 个答案:

答案 0 :(得分:0)

setUp每次模拟只能调用一次,如果您将场景列表作为参数传递给它,而不是并行运行它们,则在您的情况下是没有意义的。应该起作用的是使用注入配置文件运行单个方案,该方案将以很少的不同级别的负载依次运行您的方案。每次迭代的用户数都可以通过一些配置功能加载。

val steps = Seq(5, 10, 15, 25, 40) // Contains users/s in each step, can be read from config

//Build list of injections based on sequence above
val injectionProfile = steps.flatMap(
  load => Seq(
    constantUsersPerSec(load).during(30 seconds),
    nothingFor(10 seconds)
  )
)

val httpConf = http.baseURL("http://google.com")

val myscenario = scenario("My scenario")
  .exec(
    http("Get example")
      .get("/")
      .check(status.is(200))
  )

setUp(
  myscenario.inject(injectionProfile).protocols(httpConf)
)

如果您希望将每个迭代都包含在单独的报告中,最好的方法是创建抽象模拟类,并创建几个其他类,这些类使用不同的构造函数参数进行扩展,但是很难获得可变数量的步骤,因此如果与其他方法相比,您可以选择具有恒定数量的变体。