2014-09-17 6 views
0

저는 작은 회사의 시스템 관리자이고 웹 앱 중 하나에 대한 첫 번째 테스트를 설정하려고합니다. 나는 C와 Java Syntax와 Regexes를 약간 알고 있지만 Scala는 전혀 없다.URL에서 가져온 JSessionID

테스트하려는 앱에 URL에 jsessionid (jvmRoute 포함)가 있고 쿠키에 설정되어 있지 않습니다. Stéphane Landelle wrote here에 따르면 Gatling은 사용자 세션 당 jsessionid를 자동으로 기록하여 재생하지만 jsessionid가 쿠키로 설정된 경우에만 작동하는 것처럼 보입니다.

테스트 케이스의 URL에서 실제 기록 된 jsessionid를 삭제 했으므로 나중에 시도 할 때 유효하지 않습니다. 테스트를 실행하면 Appserver는 새로운 jsessionid를 생성합니다.이 jsessionid는 향후 호출에 포함되지 않습니다.

이 때문에 나는 초기 리디렉션에서 jsessionid를 긁어내어 향후 URL에 포함하려고합니다.

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

Gatling이 리디렉션 (기본값)을 따른다면 방문 요청에 대한 점검이 적용됩니다. jsessionid 경로 매개 변수를 가져 오려면 HttpProtocol에서 추적 리디렉션을 사용하지 않거나 currentLocationRegex 수표를 사용하십시오.

그런 다음이 jsessionid 경로 매개 변수는 첫 번째 페이지에만 있습니까? 아니면 모든 페이지에 있습니까? 일반적으로 서블릿 컨테이너가 브라우저가 쿠키를 지원하고 세션 추적에 대신 사용할 수있을 때까지 첫 페이지에만 있습니다.

앱이 사용 중지 된 쿠키를 지원하도록 확실하게 알고 계신지 (2014 년, 자바 스크립트를 사용 중지하지 않은 이유는 ...). 그렇지 않은 경우 경로 매개 변수 세션 추적을 사용하지 않도록 설정할 수 있습니다. Tomcat에서이 작업을 수행하는 방법은 this thread을 확인하십시오.

그렇다면 모든 URL에이 경로 매개 변수를 추가해야합니다. 다음과 같은 방법을 정의 할 수 있습니다.

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

게시물에 동일한 URL을 두 번 포함했습니다. 또한 앱이 작동하는 방식을 제어 할 수 없습니다. 쿠키로 전환 할 수는 없지만 쿠키를 선호합니다. 마지막으로, 예, jsessionid는 뒤 따르는 모든 요청의 URL에 있습니다. –

+0

그냥 고정 링크 –

+0

그 기능 (currentLocationRegex)을 얻으려면 2.0.0-RC2에서 2.0.0-RC5로 업그레이드해야했지만 이제는 작동합니다. 고마워, 스테판! –

관련 문제