首页 > 解决方案 > Gatling:是否可以像用户一样升级单个场景?

问题描述

考虑一个使用 Gatling 测试 API 的示例。对于一些奇怪的要求,我必须为每个用户获取一个场景

var scenarioList // This is of type mutable list

我在此列表中添加了很多场景,因为我的请求正文应该因每个用户而异,否则请求将不会被处理。此时,这些单独的场景配置了以下加特林模拟

Ex: scenarioList += scenario1. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario2. inject(rampUsers(1) over (1 minutes)
    scenarioList += scenario3. inject(rampUsers(1) over (1 minutes)
    .
    .
    .
    so on

现在在如下全局设置中调用所有这些场景

setUp(scenarioList: _*).assertions(
    forAll.successfulRequests.percent.gte(90)
  )

假设我有 1000 个用户(scenarioList大小为 1000),这里的问题是所有 1000 个用户都将同时启动,但我想增加这些用户。所以问题在于增加场景而不是并行运行它们。

这可能吗 ?如果没有,还有其他方法可以遵循吗?随着请求主体的变化,我不能奢侈地与多个用户一起运行相同的场景。请告诉我。

标签: load-testinggatlingscala-gatling

解决方案


我能够通过feeders在场景中使用来解决这个问题,所以我不需要创建多个场景。

feedersGatling 提供了参数化任何 http 请求的请求正文的选项。

代码示例:

  var randomSession = Iterator.continually(Map("randsession" -> ( req.replace("0000000000", randomStringGenerator.randomString(10)))))

  val httpConf = http
    .baseURL("http://localhost:5000")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .userAgentHeader("Mozilla/4.0(compatible;IE;GACv10. 0. 0. 1)")

  val scn = scenario("Activate")
    .feed(randomSession)
    .exec(http("activate request")
    .post("/login/activate")
    .body(StringBody("""${randsession}"""))
    .check(status.is(200)))
    .pause(5)

  setUp(
    scn.inject(atOnceUsers(5))
  ).protocols(httpConf)
}

推荐阅读