从URL获取记录JSessionID

时间:2014-09-17 11:07:37

标签: scala url jsessionid gatling

我是一家小公司的系统管理员,我正在尝试为我们的一个Web应用程序设置第一个测试。我知道一点C和Java语法以及Regex,但是没有任何Scala。

我正在尝试测试的应用程序在URL中有jsessionid(包括jvmRoute),而不是在cookie中设置。根据StéphaneLandellewrote here的说法,Gatling应该自动记录每个用户会话的jsessionid并重播它,但这似乎只有在jsessionid设置为Cookie时才有效。

我从测试用例中的URL中删除了实际记录的jsessionid,并推断它在将来的任何尝试中都无效。当我运行测试时,Appserver会生成一个新的jsessionid,然后不再包含在以后的任何调用中。

因此,我试图从初始重定向中删除jsessionid并将其包含在任何未来的URL中。第一个响应中有一个Location Header,如下所示:

Location    https://URL/welcome.do;jsessionid=F97250BDC1576B5766CEFA56645EA3F4.node1

目前代码如下:

    .exec(http("Open Page")
      .get("""/?code=abcdef""")
      .headers(headers_0)
 // Test extract jsessionid from URL
       .check(headerRegex("Location", "jsessionid=(.*)")).saveAs("jsess")

    .exec(http("welcome.do")
      .post("""/welcome.do;jsessionid=${jsess}""")

......它不会编译。

12:15:14.198 [ERROR] i.g.a.ZincCompiler$ - FirstTest.scala:53: value saveAs is not a member of io.gatling.http.request.builder.HttpRequestBuilder
12:15:14.199 [ERROR] i.g.a.ZincCompiler$ -          .check(headerRegex("Location", "jsessionid=(.*)")).saveAs("jsess")
12:15:14.200 [ERROR] i.g.a.ZincCompiler$ -                                                             ^
12:15:14.261 [ERROR] i.g.a.ZincCompiler$ - one error found

如果我将一个结束括号移到最后:

  .check(headerRegex("Location", "jsessionid=(.*)").saveAs("jsess"))

它编译但不能完成所需的操作:

---- Errors --------------------------------------------------------------------
> No attribute named 'jsess' is defined                              11 (78.57%)
> status.in(200,304,201,202,203,204,205,206,207,208,209), but ac      2 (14.29%)
tually found 404
> headerRegex((Location,jsessionid=(.*))).exists, found nothing       1 ( 7.14%)
================================================================================

那么,我如何记录jsessionid才能重用它?或者我在这里做了完全错误的事情?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果Gatling遵循重定向(默认),则会在登陆请求上应用检查。为了获取jsessionid路径参数,您可以在HttpProtocol中禁用跟随重定向,或使用currentLocationRegex检查。

那么,这个jsessionid路径参数只适用于第一页或所有这些参数吗? 通常,它只存在于第一页上,直到servlet容器意识到您的浏览器支持cookie并且它可以使用它们进行会话跟踪。

你真的确定你希望你的应用程序支持禁用的cookie(我的意思是,我们在2014年,为什么不禁用javascript ...)。如果没有,您可以禁用路径参数会话跟踪。检查this thread以了解如何在Tomcat上完成。

如果是,是的,您必须将此路径参数添加到每个网址。您可能希望为此定义一个方法,例如:

def appendJSessionId(pathWithoutQuery: String) =
  pathWithoutQuery + ";jsessionid=${jsessionid}"