首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从URL记录JSessionID

从URL记录JSessionID
EN

Stack Overflow用户
提问于 2014-09-17 11:07:36
回答 1查看 1.7K关注 0票数 0

我是一家小公司的系统管理员,我正试图为我们的一个网络应用程序建立第一次gatling测试。我了解一些C和Java语法以及Regexes,但对Scala一无所知。

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

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

正因为如此,我尝试从初始重定向中抓取jsessionid,并将其包含在任何未来的URL中。第一个响应中有一个位置标头,如下所示:

代码语言:javascript
复制
Location    https://URL/welcome.do;jsessionid=F97250BDC1576B5766CEFA56645EA3F4.node1

目前的代码如下:

代码语言:javascript
复制
    .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}""")

...and它不编译。

代码语言:javascript
复制
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

如果我将一个结束括号移到末尾:

代码语言:javascript
复制
  .check(headerRegex("Location", "jsessionid=(.*)").saveAs("jsess"))

它编译但不做所需的事情:

代码语言:javascript
复制
---- 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以便重用它呢?还是我在这里做错了事?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 11:47:06

如果Gatling遵循重定向(默认),将对着陆请求进行检查。为了获取jsessionid参数,可以禁用HttpProtocol中的跟踪重定向,或者使用currentLocationRegex检查。

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

你真的很确定你想让你的应用程序支持禁用的cookie(我的意思是,我们在2014年,为什么不也禁用javascript .)如果没有,则可能会禁用path参数会话跟踪。检查这条线是如何在Tomcat上完成的。

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

代码语言:javascript
复制
def appendJSessionId(pathWithoutQuery: String) =
  pathWithoutQuery + ";jsessionid=${jsessionid}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25888936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档