Gatling2:我如何从虚拟用户的会话中读取

时间:2014-11-19 13:03:53

标签: scala gatling

我意识到我可以在虚拟用户的会话中保存响应主体:

  val session: Session = Session("MySCN", "123")
  val scn = scenario("MySCN")
    .exec(http("my_request")
    .post(serverURL)
    .headers(headers)
    .body(InputStreamBody(Helper.getByteArrayInputStream))
    .check(status.is(200), bodyBytes.saveAs("responseBody")))

   //key not found...
   session("responseBody").as[ByteArray]

我如何从这个(隐含的?)Sesssion中读取那个responseBody? 我也创建了一个明确的会话......

修改

根据答案,我澄清了我的情景。在答案中我不知道函数 transformBytes 是如何工作的。

2 个答案:

答案 0 :(得分:0)

将函数传递给Gatling DSL方法:

.body(ByteArrayBody(session => session("responseBody").validate[Array[Byte]].map(transformBytes)))

或在exec块中执行此操作并将转换结果存储在新属性

exec { session =>

  session("responseBody").validate[Array[Byte]]
    .map(transformBytes)
    .map(newBytes => session.set("newBytes", newBytes))
}

请注意,您可能希望从会话中删除原始字节,以便它们不会在内存中停留太长时间并最终保留在旧版本中。

答案 1 :(得分:0)

基于Stephane的回答,这对我有用:

 val scn = scenario("MySCN")
    .exec(http("my_request")
    .post(serverURL)
    .headers(headers)
    .body(InputStreamBody(Helper.getByteArrayInputStream))
    .check(status.is(200), bodyBytes.saveAs("responseBody")))

    .exec(session=>{
    val theResponse = session("responseBody").validate[Array[Byte]]
    //Analyse theResponse...
    val bas = new ByteArrayInputStream(theResponse.get)
    //... and make sure to return the session
    session
  })

因此不需要明确的用户会话。