我是一家小公司的系统管理员,我正在尝试为我们的一个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才能重用它?或者我在这里做了完全错误的事情?任何帮助表示赞赏。
答案 0 :(得分:1)
如果Gatling遵循重定向(默认),则会在登陆请求上应用检查。为了获取jsessionid路径参数,您可以在HttpProtocol中禁用跟随重定向,或使用currentLocationRegex检查。
那么,这个jsessionid路径参数只适用于第一页或所有这些参数吗? 通常,它只存在于第一页上,直到servlet容器意识到您的浏览器支持cookie并且它可以使用它们进行会话跟踪。
你真的确定你希望你的应用程序支持禁用的cookie(我的意思是,我们在2014年,为什么不禁用javascript ...)。如果没有,您可以禁用路径参数会话跟踪。检查this thread以了解如何在Tomcat上完成。
如果是,是的,您必须将此路径参数添加到每个网址。您可能希望为此定义一个方法,例如:
def appendJSessionId(pathWithoutQuery: String) =
pathWithoutQuery + ";jsessionid=${jsessionid}"