2011-01-21 2 views
7

세션 ID가 필요한로드 테스트를 확인하기 위해 세션 ID와 다른 요청을 저장하기위한 로그인에 두 개의 요청을 추가했습니다. 한 번만 컨트롤러에 대한 자식으로 추가하여 한 번만 로그인 요청을 만들었습니다. 하지만 약 100 또는 200 스레드를 추가하여 테스트 할 때 로그인도 많은 시간을 실행합니다. 시작 스레드 만 로그인 요청을 실행하고 싶습니다. 가능한가? 아래 테스트 케이스 계층 구조를 추가했습니다.은 컨트롤러가 Jmeter에서 한 번만 실행됩니다.

ThreadGroup: 
Htp requestdefault 
HTTP cookie manager 
    once only controller 
login Http request 
Http request for number of users 

답변

0

"한 번만 컨트롤러에 로그인 HTTP 요청"및 일반 "HTTP 요청"을 루프 컨트롤러에 넣을 수 있습니다. 이제 HTTP 요청을 100 번 또는 200 번 실행하도록 루프를 설정할 수 있습니다. 참조 : jmeter.apache.org/usermanual/component_reference.html#Loop_Controller

타이머를 사용하면 좀 더 사실적인 테스트를 수행 할 수 있습니다. 120 초 내에 200 건의 요청이 발생하고 120/200 초 동안 각 요청이 일시 중지되도록 할 수 있습니다. 대부분의 타이머는 밀리 초 단위로 작동하므로 해당 숫자 (120/200 * 1000) 밀리 초를 만들 수 있습니다. 참조 : jmeter.apache.org/usermanual/component_reference.html#timers

로그인을 수행하고 다른 스레드 그룹에서 200 개의 스레드를 수행하는 별도의 설정 스레드 그룹을 만들 수도 있습니다. 기사 확인 : http://www.informit.com/guides/content.aspx?g=java&seqNum=520

이 모든 정보는 올바른 방향으로 도움이 될 것입니다. 행운을 빕니다!

+0

나는 다음 각 요청 만 것 첫 번째 요청을 완료 한 후 의미 하나 하나를 실행 루프 컨트롤러 내부의 "정상적인 HTTP 요청을"넣어 경우, 한 번에 모든 요청을 전송합니다 두 번째 것을 시작하십시오. 그래서 얼마나 많은 요청이 연결을 망칠지 찾을 수 없습니다. 그리고 내가 한 번만 의심의 여지가 한 번만 컨트롤러, 그리고 난 여전히 한 번만 컨트롤러의 기능을 이해할 수 없습니다. 내 테스트 케이스에서 그것은 스레드 그룹에서 언급 한 모든 스레드에 대해 실행되고 있습니다. 그것은 한 번만 테스트 케이스에 대해 실행해야합니다 권리?. 이 문의에 대한 도움을주십시오 – prashant

21

"ONLY ONCE"컨트롤러는 생각대로 작동하지 않습니다.

PER THREAD는 "한 번만"실행됩니다. 따라서 100 개의 스레드가 있으면 100 번 실행됩니다.

당신이 시험에 한 번 실행하려면

는 다음을 수행 : 당신이 threadgroups A와 B 사이의 변수를 공유해야하는 경우

Test Plan (Set thread groups to "run consecutively" 
- Cookie Manager 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- Thread Group B 
- - - Rest of test 

이 있습니다, 당신은 속성으로 그들을 설정해야합니다. 스레드 그룹간에 변수를 공유 할 수는 없지만 속성은이를 수행 할 수 있습니다. 이를 위해 속성 함수를 사용해야합니다.

함수 __setProperty는 값을 전역 변수로 자동 저장합니다. __setProperty를 시작하는 가장 깨끗한 방법은 THREAD A에 쿠키를 만드는 샘플러에 POST 프로세서 Beanshell 스크립트를 만드는 것입니다. THREAD B의 값을 검색하려면 __property 함수를 매개 변수의 VALUE로 추가합니다 쿠키 값이 필요합니다.

으로 Beanshell 스크립트는 다음과 같이 보일 것입니다 :

props.put("COOKIENAME","COOKIEVALUE"); //creates a property "COOKIENAME" with value "COOKIEVALUE" 
print(props.get("COOKIENAME")); //prints the value out to the console 

위의 코드는 항상 COOKIENAME에 대해 동일한 값, 아이디어를 적은 다음 것이다. 따라서 우리는 "쿠키"가 동적인지 확인해야합니다. POST-PROCESSOR 정규 표현식을 넣어 쿠키 값을 추출한 다음 beanshell 스크립트에 전달하는 것이 좋습니다.

그래서, 우리의 테스트 계획은 이제 다음과 같습니다

Test Plan (Set thread groups to "run consecutively" 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- - - - - Regex to grab cookie, store as "regexCookie" 
- - - - - Beanshell to set property 
- Thread Group B 
- - - Rest of test 

그리고 우리으로 Beanshell 스크립트는 이제 다음과 같습니다

+0

안녕하세요, 귀하의 답변에 대해 대단히 감사하지만 속성 값을 저장하고 가져 오는 방법에 여전히 어려움을 겪고 있습니다. 속성 값을 저장할 위치와 다른 스레드에서 가져 오는 방법을 설명해 주시겠습니까? "THREAD A"의 쿠키 관리자 값을 저장하고 "THREAD B"에 가져 오려고합니다. function helper를 사용하여 _property 함수를 선택하여 하나의 문자열을 얻었지만 전역으로 만들기 위해이 String을 저장할 위치를 혼란스럽게합니다. – prashant

+1

__property 함수는이를 자동으로 전역 변수로 저장합니다. __setProperty를 시작하는 가장 깨끗한 방법은 THREAD A의 쿠키를 허용하는 샘플러에 POST 프로세서 Beanshell 스크립트를 만드는 것입니다. THREAD B의 값을 검색하려면 __property 함수를 매개 변수의 VALUE로 추가합니다 쿠키 값이 필요합니다. 희망이 도움이 (반영 원래 응답을 편집) – BlackGaff

+0

이것은 좋은 답변입니다.다음과 같이 다른 스레드 그룹에서 속성 값을 검색 할 수 있다고 덧붙입니다. $ {__ property (COOKIENAME)} – jlunavtgrad

0

전용 컨트롤러 일단 BlackGaff이 그것을 설명하는 방식으로 작동합니다.

동일한 로그인/비밀번호로 100 명의 사용자를 인증한다는 의미이므로 잘못되었습니다.

그러나 아직도하고 싶다면 setupThread를 한 명의 사용자와 함께 사용할 수 있습니다. 일반적으로 테스트중인 일부 초기화 작업에는 유용하지만 내게 잘못된 것으로 보이는 요구 사항에 응답하는 것은 아닙니다.

0

Jmeter 2.9에서는 "한 번 컨트롤러 만"및 "루프 컨트롤러"를 사용하여이를 수행 할 수 있습니다.

멋진입니다!

프랭키

JMeter를 새로운 버전의
+0

이것은 올바르지 않거나 실제로 대답이 아닙니다. –

2

정확히 당신이 필요 않는 "설정 스레드 그룹"을 추가 할 수 있습니다.

사전 테스트 작업을 수행하는 데 사용할 수있는 특별한 유형의 스레드 그룹입니다. 이 thread의 동작은, 통상의 thread 그룹 요소와 완전히 같습니다. 차이점은 테스트가 일반 스레드 그룹을 실행하기 전에 이러한 유형의 스레드가 실행된다는 것입니다.

http://jmeter.apache.org/usermanual/component_reference.html#setUp_Thread_Group