如何在并发请求之间共享以前检索到的值?

时间:2014-06-11 11:54:33

标签: scala stress-testing gatling

我目前正在使用gatling测试网络服务。 因此,我必须通过向Web服务请求检索一些accessToken

val accessToken = exec(http("access token")
  .get("""/protected/document/access.do?id=266892""")
  .headers(headers_html)
  .check(status.lessThan(400))
  .check(regex("""\"accessToken\":\"(.+?)\"""").saveAs("accessToken"))
).pause(50 milliseconds)

之后,我使用检索到的accessToken向Web服务发出一些请求。 到目前为止这是有效的。

但现在我想使用检索到的accessToken同时对后面的请求进行压力测试。 accessToken只能检索一次,但之后的并发请求应使用相同的检索accessToken

我对scala并不熟悉,但我制作了一个scala单例,我希望将检索到的accessToken存储在单个变量中,以后可以由并发请求使用。

这是一个好方法吗?我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您要检索多少个accessToken?每个虚拟用户只有一个共享一个或一个?

如果是前者,则无法使用Gatling API获取它。 Gatling发布了AsyncHttpClient,因此您可以使用它来获取accessToken并将其作为val存储在Simulation中。

如果是后者,只需使用Gatling EL将保存的值注入其他请求:" foo $ {accessToken} bar"。

顺便说一句,我怀疑你的正则表达式是否按预期工作。你使用三重引号转义,所以你必须保护你的内部双引号:"""" accessToken":"(。+?)&#34 ;"""