我意识到我可以在虚拟用户的会话中保存响应主体:
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 是如何工作的。
答案 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
})
因此不需要明确的用户会话。