没有达到方法后的嘎嘎叫

时间:2016-03-02 18:16:14

标签: scala gatling

现在,尽管它是圆形的,我仍然难以使用定制的加特林喂食器。我收到此错误:

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))

1 个答案:

答案 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) ,以确定是否是这种情况。

祝你好运