现在,尽管它是圆形的,我仍然难以使用定制的加特林喂食器。我收到此错误:
java.lang.IllegalStateException:Feeder现在为空,停止引擎
我读这是默认行为。但是,我想确保每个用户使用不同的来自馈线的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(&#34;执行更新的管理员&#34;)。exec(ImportRecords.update)setUp(adminUpdaters.inject(atOnceUsers(1))。protocols(httpConf))
答案 0 :(得分:1)
当送料器用完时,Gatling停止整个发动机。这是特殊的情况,也在例外情况下说明:
[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine
仅在模拟完成时调用挂钩after
。您可以在模拟中接收逻辑意义上的错误,但不能开发人员错误。当存在开发人员错误时不会调用Hook,在这种情况下它是。
简单地用完送纸器是一个错误,因为它表示您的setUp
部分模拟与您提供的数据不相关feeder
。
顺便说一下。您的setUp
模拟部分是什么样的?
编辑:只是看看你的代码结构,我猜测(虽然没有看到整个模拟),你的ImportRecords
的初始化发生在调用钩子before
之前,因此你的{ {1}}包含空数组。使一个空数组循环将导致另一个空数组,因此当Gatling尝试从馈送器中获取一个元素时,您将获得异常。尝试添加:
val feeder
初始化您的对象println(refUrlFeeder)
,以确定是否是这种情况。