当前位置: 首页 > 知识库问答 >
问题:

Gatling:多次动态设置一个场景

翟奕
2023-03-14

我有一个场景,有4个不同的API调用,它们总是保持不变。我试图创建一个并行的压力测试,我希望相同的场景首先运行,比如10%,然后是20%,30%······max用户的等等。

但我也需要设置是动态的,取决于脚本中的可配置变量这是造成问题的原因,我希望能够很容易地配置它运行例如10%,50%和100%。

这就是我到目前为止所做的(缩短了,并且onceuser和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个答案

郎吉星
2023-03-14

每个模拟只能调用安装程序一次,如果您将场景列表作为参数传递给它,那么它将并行运行这些场景,这在您的情况下是没有意义的。应该使用注入配置文件来运行单个场景,这些配置文件将一个接一个地运行您的场景,并且具有很少的不同级别的负载。每个迭代的用户数可以从一些配置FE加载。

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

如果您希望每个迭代都在不同的报告中,最好的方法是创建抽象模拟类和几个用不同构造函数参数扩展它的类,但这样就很难获得可变的步骤数,所以如果您可以使用固定数量的变量,那么可能是其他方法。

 类似资料:
  • 接口说明 设置场景状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /wish3dearth/api/scene/v1.0.0/setSceneStatus 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN sceneId string f

  • 接口说明 设置场景状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 POST /wish3dearth/api/scene/v1.0.0/set

  • 我有测试单个endpoint的简单场景。我对DSL有问题。不知道如何使用feeder启动场景。我必须先进行无用的调用才能编译它。 我怎样才能摆脱

  • 以下是我需要做的: 但是当然,csv()函数接受一个字符串,而不是EL表达式。我需要能够在场景执行的适当时刻组成该字符串。 我可以像这样构建字符串: 但不幸的是,以下高管没有看到数据。在我看来,这似乎是某种范围问题。我猜feed()表达式正在做它应该做的事情,但是因为它不是外链的一部分,所以它没有被放置在它所属的位置。我应该打电话吗。馈送会话对象中的某个对象,以便将其连接到正在进行的链? 有没有关

  • cmf_set_dynamic_config($data) 功能 设置动态配置 参数 $data: array 要设置的数据,格式["cmf_default_theme"=>'simpleboot3'] 返回 boolean

  • 我对SpriteKit非常陌生。我有一组节点,需要一起移动到每个节点的不同点,在所有节点的动画完成后,我想做一些其他的事情。 我以前是用组件制作的。一个块提供了我需要的东西。但在SpriteKit中,每个节点都有自己的动作,并自行设置动画。我找不到任何精灵节点的块动画。所以我无法控制动画的完成。 希望,我很清楚。提前谢谢。