加特林负载测试和运行方案

时间:2019-10-23 12:59:56

标签: scala testing qa gatling scala-gatling

我希望创建三种方案:

  • 第一个方案将在30秒内运行一堆GET请求
  • 第二个和第三个场景将并行运行,直到第一个场景结束。

我希望从报告中排除第一种情况的请求。

我已经基本实现了要达到的目标,但没有看到预期的结果:

val myFeeder = csv("somefile.csv")

val scenario1 = scenario("Get stuff")
.feed(myFeeder)
.during(30 seconds) {
  exec(
      http("getStuff(${csv_colName})").get("/someEndpoint/${csv_colName}")
  )
}

val scenario2 = ...

val scenario3 = ...

setUp(
  scenario1.inject(
    constantUsersPerSec(20) during (30 seconds)
  ).protocols(firstProtocaol),


  scenario2.inject(
    nothingFor(30 seconds), //wait 30s
    ...
  ).protocols(secondProt)

  scenario3.inject(
    nothingFor(30 seconds),  //wait 30s
    ...
  ).protocols(thirdProt)

)

我看到第一个场景在整个测试中都在运行。 30秒钟后还不停止吗?

对于第一种情况,我想循环浏览CSV文件并为每行执行一个请求。也许每秒5-10个请求,我该如何实现?

我也希望它在30年代后停止,然后并行运行其他两个。因此,以上两种情况下的nothingFor

我又如何从报告中排除?

谢谢

1 个答案:

答案 0 :(得分:1)

由于注射配置文件和“获取材料”方案之间的设置组合,您可能无法获得预期的结果。

constantUsersPerSec(20) during (30 seconds)

将在每秒30秒钟的情况下,每秒在“获取资料”方案中启动20个用户。因此,即使在30秒内,也会有20位用户开始“获取资料”。注入pofile仅控制用户何时启动,而不控制用户活动的时间。因此,当用户执行“获取材料”方案时,由于.during循环,他们在30秒的过程中反复发出“获取”请求。

因此,至少,您将让用户执行“获取资料” 60秒-完全执行其他方案。取决于您getStuff调用的执行时间,它甚至可能更长。

为避免这种情况,您可以精确计算出“获取材料”方案要运行多长时间,将其设置在注入配置文件中,并且在方案中不存在循环。另外,您可以将“ nothingFor”值设置为> 60s。

要从报告中排除“获取材料”调用,您可以在协议定义中添加沉默(假设它未与其他请求共享)。有关更多详细信息,请访问https://gatling.io/docs/3.2/http/http_protocol/#silencing