如何在scala文件中使用gatling场景之外的已保存变量值

时间:2015-08-27 13:06:42

标签: scala vector gatling

gatling get请求之一是提供多个字符串值,我使用saveAs保存它们,如下所示:

val scn = scenario("ReadLogs")
        .exec(http("logEvent")
        .get("""/xyz/abc""")
        .check(jsonPath("$.data[*].message").findAll.saveAs("mList")))

/* My scala code to achieve some requirements*/

我可以在日志中看到“mList”是一个包含我所需字符串消息的向量。我想在我的scala代码中处理这些消息。如何以简单的方式做到这一点?我想如果我可以在scn场景之外使用“mList”变量,那么事情会好转,所以我会更具体地提出这个问题。如何在我的scala代码中使用“mList”变量?

2 个答案:

答案 0 :(得分:3)

在单独的执行步骤中编写过程逻辑,并确保在获取数据后执行该过程。

val fetchLogs = exec(
  http("logEvent")
    .get("""/xyz/abc""")
    .check(jsonPath("$.data[*].message")
    .findAll
    .saveAs("mList")
)

val processLogs = exec { s: Session =>
    val mList = s("mList").as[Seq[Any]]
    val result = ...
    s.set("processResult", result)
}

val scn = scenario("ReadLogs").exec(
  fetchLogs,
  processLogs
)

更新:保存数据以供以后处理

var mList: Seq[String] = _    

val fetchLogs = exec(
  http("logEvent")
    .get("""/xyz/abc""")
    .check(jsonPath("$.data[*].message")
    .findAll
    .transform { v => mList = v; v } // save the data
    .saveAs("mList")
)

val scn = scenario("ReadLogs").exec(fetchLogs)

after {
  // Process the data here. It will be executed when the simulation is finished.
}

答案 1 :(得分:0)

有一个很棒的博客对此进行了描述: https://devqa.io/gatling-save-response-body/

我在@thirstycrow的答案中错过的是:

然后我们可以使用${tokenId}

引用变量