【问题标题】:Gatling: dynamically setup one scenario multiple timesGatling:多次动态设置一个场景
【发布时间】:2018-08-13 23:13:46
【问题描述】:

我有一个场景,其中有 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)
)

【问题讨论】:

    标签: scala gatling


    【解决方案1】:

    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)
    )
    

    如果您希望将每次迭代都放在单独的报告中,那么最好的方法是创建抽象模拟类和几个使用不同构造函数参数扩展它的类,但是很难获得可变数量的步骤,所以如果与其他方式相比,您可以拥有恒定数量的变体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多