如何在Gatling场景中控制exec语句的执行顺序?

时间:2016-02-19 22:09:24

标签: scala gatling

在下面的代码片段中,我希望会话函数在HttpRequestbBuilder SolrProductionDataRequestBuilder之前执行,但我无法实现...... Scala和Gatling相对较新,所以请在这里原谅一个明显的错误...... (我需要修改会话密钥以使它们在将它们添加到http请求之前使其适合Solr - Solr允许(需要)重复密钥.Solr查询(从Splunk日志派生)通过tsv馈送器读入会话中)< / p>

  var scn = scenario("Solr load scenario using production solr request traffic")
    .feed(queryParameterFeeder)
    .exec(session => {
      duplicateGatlingSessionMap(session.attributes)
      session
    })
    .exec(
      SolrProductionDataRequestBuilder("wow", gatlingSessionMap)
        .build()
        .asJSON
        .check(status.is(200))
    )
   .pause(3000 milliseconds, 5000 milliseconds) 

2 个答案:

答案 0 :(得分:1)

来自Session API doc:

  

会话实例是不可变的!

我不知道您的duplicateGatlingSessionMap做了什么,但您的exec(function)仅返回原始会话

注意:请勿使用var,请使用val。没有理由使用可重新分配的参考文献。

答案 1 :(得分:0)

正如Stephane已经提到的“会话”是不可变的,即在你的第一个exec()中,你没有返回修改过的会话。否则exec()语句的流程就像代码一样,因此按顺序编写。

不确定你的代码是做什么的,但首选的/惯用的方法是这样写:

def duplicateGatlingSessionMap(session: Session) Session = {
  // your session modification logic here
}

val scn = scenario("Solr load scenario using production solr request traffic")
  .feed(queryParameterFeeder)
  .exec( session => // above defined function which modifies the session and returns it back
    duplicateGatlingSessionMap(session) 
  ) 
  .exec(
  SolrProductionDataRequestBuilder("wow", gatlingSessionMap)
      .build()
      .asJSON
      .check(status.is(200))
  )
  .pause(3000 milliseconds, 5000 milliseconds) 

希望这有帮助。

编辑:见评论