Scala 使用ChainBuilder定义用户流的最佳方法是什么?

Scala 使用ChainBuilder定义用户流的最佳方法是什么?,scala,gatling,Scala,Gatling,我是Scala和Gatling的新手,我正在尝试找出定义用户故事并将其传递给Gatling场景的最佳方法 在我的例子中,当我说用户故事时,我指的是一个流,它将包括登录、许多不同的调用,然后在整个测试期间循环另一个调用列表 我创建了以下函数来创建场景: def createScenario(name: String, feed: FeederBuilder, chains: ChainBuilder*): ScenarioBuilder = { scenario(name).feed(f

我是Scala和Gatling的新手,我正在尝试找出定义用户故事并将其传递给Gatling场景的最佳方法

在我的例子中,当我说用户故事时,我指的是一个流,它将包括登录、许多不同的调用,然后在整个测试期间循环另一个调用列表

我创建了以下函数来创建场景:

 def createScenario(name: String, feed: FeederBuilder, chains: ChainBuilder*): ScenarioBuilder = {
    scenario(name).feed(feed).forever() {
      exec(chains).pause(Config.pauseBetweenRequests)
    }
  }
下面是我如何执行此函数的:

val scenario = createScenario(Config.testName, feeder.random,
  setSessionParams(PARAM1, Config.param1),
  setSessionParams(PARAM2, Config.param2),
  login, 
  executeSomeCall1, 
  executeSomeCall2, 
  executeSomeCall3, 
  executeSomeCall4, 
  executeSomeCall5, 
  executeSomeCall6, 
  executeSomeCall7, 
  executeSomeCall8, 
  executeSomeCall9,   
  )
以下是executeSomeCall函数的示例:

  def executeSomeCall = {
    exec(http("ET Call Home")
      .post("/et/call/home")
      .body(ElFileBody("/redFingerBody.json")).asJson
      .check(status is 200))
  }
我的第一个问题:

这是定义rest调用链并将其提供给场景的正确方法吗?我这样问是因为我在定义这样的流时看到,由于某种原因,并不是所有的REST调用都被实际执行。奇怪的是,如果我改变调用的顺序,它就会工作,所有函数都会被调用。(所以我肯定做错了什么事)

我的第二个问题:

如何在此流中定义无限循环?(只要测试运行,无限期)


例如,我希望上面的流启动,当它到达executeSomeCall8时,它将在整个测试期间循环executeSomeCall8和executeSomeCall9

我不明白为什么您的调用不会被执行,但是您构建场景的方式没有那么灵活。您可以在不需要createScenario()方法的情况下使用链接

这就引出了你的第二个问题,当你将场景链接为:

val scn=场景(“某物”)
...
.exec(someCall7)
.永远{
执行主任(索姆卡尔8)
.exec(someCall9)
}
...
在我的情况下,有些人看起来像:

val someCall=http(“请求名称”)
.get(“/some/uri”)
...
注意:foerever()只是一个例子,您可以使用其他适合您需要的循环语句。
我希望它能有所帮助。

请注意,如果使用.forever,则需要在注射配置文件中设置maxDuration