未达到方法后加特林

gatling after method not reached

现在我很难使用自定义的加特林机进纸器,尽管它是圆形的。我收到此错误:

java.lang.IllegalStateException:进料器现在空了,停止引擎

我正在阅读这是默认行为。但是,我想确保每个用户使用来自馈线的不同 refurl:refUrlFeederBuffer。

此外,为什么 运行 没有使用我的 after 方法?无论模拟成功或失败,我都需要我的清理程序 运行。如果我不清理,我就无法重新开始测试!

var refUrlFeeder: Array [Map[String, String]] = Array()

before {
   //create stuff and put the refUrls from it in a map
     refUrlFeeder = refUrlFeeder :+ Map("refUrl" -> simpleUrl)
}

after {
   // delete whatever I created in the before method
   // THIS METHOD DOES NOT EXCUTE if the feeder is emptied
   // I need it to execute regardless of errors during the scenario
}

object ImportRecords {
    val someXml = "<some xml>"
    val feeder = RecordSeqFeederBuilder(refUrlFeeder).circular
    val update =
      feed(feeder)
      exec(http("Update stuff")
       .put("${refUrl}")
       .body(StringBody(someXml))
       .asXML
       .check(status.is(200))
)
}

val adminUpdaters = scenario("Admins who do updates").exec(ImportRecords.update) setUp(adminUpdaters.inject(atOnceUsers(1)).protocols(httpConf))

当送料器用完物品时,加特林停止整个引擎。这是例外情况,在例外本身中也有说明:

[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine

Hook after 仅在模拟完成时调用。您可以在模拟中收到逻辑意义上的错误,但不会收到 开发人员错误 。当存在开发人员错误时不会调用 Hook,在本例中是这样。

只是 运行 out of feeder 是一个错误,因为它说你的 setUp 模拟部分与你提供的数据不相关,在这种情况下你的 feeder

顺便说一句。您的 setUp 模拟部分是什么样的?

编辑:只要看看你的代码结构,我猜(虽然没有看到整个模拟),你的 ImportRecords 的初始化发生在挂钩 before 被调用之前,因此你的 val feeder 包含空数组。使一个空数组循环将导致另一个空数组,因此当加特林试图从馈线中获取一个元素时,您将得到一个异常。尝试添加:

println(refUrlFeeder)

进入你的对象的初始化 ImportRecords 以查明是否是这种情况。

祝你好运