java 如何获得每个场景的恒定请求数

uubf1zoe  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(93)

我在'setUp()'方法中执行了多个场景。我想实现的是每分钟为每个场景获得4000个请求,然后重复所有。我想在晚上运行测试几个小时。
我该怎么做呢?
这是我的实际代码:

{
    List<PopulationBuilder> scenarioList = new ArrayList<>();
    scenarioList.add(get.injectOpen(constantUsersPerSec(4000).during(Duration.ofSeconds(10))));
    scenarioList.add(search.injectOpen(constantUsersPerSec(4000).during(Duration.ofSeconds(10))));
    scenarioList.add(download.injectOpen(constantUsersPerSec(4000).during(Duration.ofSeconds(10))));
    /* Shuffle list */
    Collections.shuffle(scenarioList);

    setUp(create.injectOpen(nothingFor(5), constantUsersPerSec(4000).during(Duration.ofSeconds(10)))
            .andThen(scenarioList)
            .andThen(delete.injectOpen(constantUsersPerSec(4000).during(Duration.ofSeconds(10)))))
            .throttle(
                    reachRps(4000).in(10),
                    holdFor(Duration.ofMinutes(1))
            )
            .protocols(httpProtocol);
}
fnx2tebb

fnx2tebb1#

要实现以每分钟4000个请求的速度运行多个场景的目标,您可以通过为每个场景设置注入配置文件并将测试的持续时间调整为运行几个小时来修改现有代码。

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.collection.mutable.ListBuffer

class MySimulation extends Simulation {

  val httpProtocol = http
    .baseUrl("http://example.com")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .doNotTrackHeader("1")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .acceptEncodingHeader("gzip, deflate")
    .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0")

  val scenarios = List(
    scenario("Get Scenario")
      .exec(http("Get Request").get("/get")),
    scenario("Search Scenario")
      .exec(http("Search Request").get("/search")),
    scenario("Download Scenario")
      .exec(http("Download Request").get("/download"))
  )

  val injectionProfiles = ListBuffer[InjectionProfileBuilder]()
  scenarios.foreach { scenario =>
    injectionProfiles += scenario.inject(
      constantUsersPerSec(4000) during (10 minutes)
    ).protocols(httpProtocol)
  }

  setUp(injectionProfiles.toList)
    .throttle(
      reachRps(4000) in (1 minute),
      holdFor(2 hours)
    )
    .maxDuration(2 hours)
    .protocols(httpProtocol)

}

在此代码中,我们定义了三个场景-“获取场景”、“搜索场景”和“下载场景”。然后,我们使用constantUsersPerSec注入配置文件为每个场景创建一个InjectionProfileBuilders列表,速率为每秒4000个用户,持续时间为10分钟。
然后,我们使用setUp方法和注入配置文件设置模拟,并将测试限制为在1分钟内达到每秒4000个请求,并保持该速率2小时。我们还将测试的maxDuration设置为2小时,以确保测试不会无限期地运行。
希望这有帮助!

相关问题