Scala 未达到加特林后方法

Scala 未达到加特林后方法,scala,gatling,Scala,Gatling,现在,我很难使用定制的加特林给料机,尽管它是圆形的。我得到了这个错误: java.lang.IllegalStateException:进料器现在为空,正在停止引擎 我读到这是默认行为。但是,我想确保每个用户都使用不同于feeder的refurl:refUrlFeederBuffer 还有,为什么它不运行我的after方法?无论模拟成功与否,我都需要运行清理过程。如果我不清理,我就无法重新启动测试 var refUrlFeeder: Array [Map[String, String]] = A

现在,我很难使用定制的加特林给料机,尽管它是圆形的。我得到了这个错误:

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))
)
}
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
的初始化发生在调用hook
before
之前,因此你的
val feeder
包含空数组。使一个空数组循环将导致另一个空数组,因此当Gatling试图从feeder中获取一个元素时,您将得到一个异常。尝试添加:

println(refUrlFeeder)
进入对象的初始化
导入记录
,以了解是否存在这种情况


祝您好运

当喂入器的物品用完时,加特林停止整个发动机。这是例外情况,例外情况本身也有说明:

[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine
只有在模拟完成时才会调用
之后的Hook
。您可以在模拟中接收逻辑意义上的错误,但不能接收开发人员错误。当存在开发人员bug时,不会调用Hook,在本例中就是这样

简单地说,feeder用完就是一个bug,因为它表明您的
设置
部分模拟与您提供的数据不相关,在本例中,您的
feeder

顺便问一句,你的
设置
模拟部分看起来像什么

编辑:只要看看你的代码结构,我猜(虽然没有看到整个模拟),你的
ImportRecords
的初始化发生在调用hook
before
之前,因此你的
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”相当的概念。关于课前,我什么都不知道。