Scala 未达到加特林后方法
现在,我很难使用定制的加特林给料机,尽管它是圆形的。我得到了这个错误: java.lang.IllegalStateException:进料器现在为空,正在停止引擎 我读到这是默认行为。但是,我想确保每个用户都使用不同于feeder的refurl:refUrlFeederBuffer 还有,为什么它不运行我的after方法?无论模拟成功与否,我都需要运行清理过程。如果我不清理,我就无法重新启动测试Scala 未达到加特林后方法,scala,gatling,Scala,Gatling,现在,我很难使用定制的加特林给料机,尽管它是圆形的。我得到了这个错误: java.lang.IllegalStateException:进料器现在为空,正在停止引擎 我读到这是默认行为。但是,我想确保每个用户都使用不同于feeder的refurl:refUrlFeederBuffer 还有,为什么它不运行我的after方法?无论模拟成功与否,我都需要运行清理过程。如果我不清理,我就无法重新启动测试 var refUrlFeeder: Array [Map[String, String]] = A
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))
)
}
var-refUrlFeeder:Array[Map[String,String]]=Array()
以前{
//创建素材并将其添加到地图中
refUrlFeeder=refUrlFeeder:+Map(“refUrl”->simpleUrl)
}
之后{
//删除我在before方法中创建的任何内容
//如果进料器排空,此方法不会执行
//我需要它在场景中执行而不考虑错误
}
对象导入记录{
val someXml=“”
val feeder=记录器SEQFEEDERBUILDER(加油feeder)。循环
val更新=
进料(进料器)
exec(http(“更新内容”)
.put(“${refUrl}”)
.body(StringBody(someXml))
.asXML
.检查(状态为(200))
)
}
val adminUpdaters=scenario(“进行更新的管理员”).exec(ImportRecords.update)安装程序(adminUpdaters.inject(atOnceUsers(1)).protocols(httpConf))当进料器的项目用完时,Gatling停止整个引擎。这是例外情况,例外情况本身也有说明:
[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine
只有在模拟完成时才会调用之后的Hook。您可以在模拟中接收逻辑意义上的错误,但不能接收开发人员错误。当存在开发人员bug时,不会调用Hook,在本例中就是这样
简单地说,feeder用完就是一个bug,因为它表明您的设置
部分模拟与您提供的数据不相关,在本例中,您的feeder
顺便问一句,你的设置
模拟部分看起来像什么
编辑:只要看看你的代码结构,我猜(虽然没有看到整个模拟),你的ImportRecords
的初始化发生在调用hookbefore
之前,因此你的val feeder
包含空数组。使一个空数组循环将导致另一个空数组,因此当Gatling试图从feeder中获取一个元素时,您将得到一个异常。尝试添加:
println(refUrlFeeder)
进入对象的初始化导入记录
,以了解是否存在这种情况
祝您好运当喂入器的物品用完时,加特林停止整个发动机。这是例外情况,例外情况本身也有说明:
[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine
只有在模拟完成时才会调用
之后的Hook。您可以在模拟中接收逻辑意义上的错误,但不能接收开发人员错误。当存在开发人员bug时,不会调用Hook,在本例中就是这样
简单地说,feeder用完就是一个bug,因为它表明您的设置
部分模拟与您提供的数据不相关,在本例中,您的feeder
顺便问一句,你的设置
模拟部分看起来像什么
编辑:只要看看你的代码结构,我猜(虽然没有看到整个模拟),你的ImportRecords
的初始化发生在调用hookbefore
之前,因此你的val feeder
包含空数组。使一个空数组循环将导致另一个空数组,因此当Gatling试图从feeder中获取一个元素时,您将得到一个异常。尝试添加:
println(refUrlFeeder)
进入对象的初始化导入记录
,以了解是否存在这种情况
祝你好运谢谢!我试试看,然后再打给你。我在上面的代码中添加了我的设置。我绝对同意你的观点,并怀疑有什么东西没有初始化。旁注:在2.2中,将调用after块,即使进料器运行为空。哦!谢谢你让我知道!我认为这很有道理,到时候会达到2.2。泰利亚科,非常感谢你。这确实是正在发生的事情。上面的代码封装在一个名为MySimulation的类中,该类扩展了模拟。我基本上是把before()当作MySimulations的构造函数或Junit的@BeforeClass。我现在意识到before是在实例化场景执行之前执行的。如果我错了,请纠正我。不管怎样,你让我走上了解决这个问题的正确道路,所以我接受了答案。如果我是对的,我想知道在《加特林》中是否有一个与“BeforeClass”相当的概念。关于课前,不,我什么都不知道。谢谢!我试试看,然后再打给你。我在上面的代码中添加了我的设置。我绝对同意你的观点,并怀疑有什么东西没有初始化。旁注:在2.2中,将调用after块,即使进料器运行为空。哦!谢谢你让我知道!我认为这很有道理,到时候会达到2.2。泰利亚科,非常感谢你。这确实是正在发生的事情。上面的代码封装在一个名为MySimulation的类中,该类扩展了模拟。我基本上是把before()当作MySimulations的构造函数或Junit的@BeforeClass。我现在意识到before是在实例化场景执行之前执行的。如果我错了,请纠正我。不管怎样,你让我走上了解决这个问题的正确道路,所以我接受了答案。如果我是对的,我想知道在《加特林》中是否有一个与“BeforeClass”相当的概念。关于课前,我什么都不知道。