Gatling - 在循环内暂停

Gatling - Pause inside of loop

我正在尝试在带有 gatling 的循环内使用暂停,并且在单个 运行 之后我希望循环只执行 ~3 次,但它执行大约 1/秒。

我正在使用 bzt 作为 运行ner 与:

hold-for: 30s
concurrency: 1
iterations: 1
throughput: 1
private val scn = scenario("Post, Poll, and Delete")
      .forever {
          exec(http("Post").post(url + path)
            .check(status.is(201))
            .check(jsonPath("$..id").saveAs("id"))
          )
            .doWhile(session => session("status").as[String] == "STARTED", "index") {
              pause(10.seconds)
              exec(http("Poll")
                .get(url + path)
                .queryParam(id, session => session("id").as[String])
                .check(jsonPath("$..status").saveAs("status"))
                .check(jsonPath("$..status").not("ERROR"))
              )
          }.exec(http("Delete")
                  .delete(url + path)
                  .check(status.is(200))
            )
      }

编辑:在 [Stéphane] 的帮助下,我使用了以下内容:

.doWhile(condition) {
  pace(???)
  .exec(???)
}

在 Scala 中,最后一个操作的结果就是块returns。 所以你写的基本上是:

.doWhile(condition) {
  pause(???)

  return exec(???)
}

你可以看到问题:作为doWhile第二个参数传递的只是exec而没有前面的pause

发生这种情况是因为您忘记给它们附加一个点。

所以你要做的是:

.doWhile(condition) {
  pause(???)
  .exec(???)
}

我还看到您正在使用第三方启动器(遗憾)。不确定它的作用,特别是 throughput: 1 其措辞与 Gatling 中的任何内容都不匹配。如果它确实设置了 throttling,这将禁用暂停,如文档中所述。

你应该使用

pace(duration)

在循环内暂停

并使用

pause(duration)

循环外

检查this