loadrunner vugen scripting challenges
LoadRunner VuGen 스크립팅과 관련된 과제 소개 :
이것에 유익한 LoadRunner 교육 시리즈 , 우리는 VuGen 스크립트 향상 이전 튜토리얼에서. 이전 튜토리얼에서 지금까지 우리는 VuGen으로 큰 진전을 이루었습니다.
웹 HTTP / HTML 프로토콜에서 스크립트를 기록하는 방법, 상관 관계 및 매개 변수화를 통해 데이터 / 값을 처리하는 방법, 체크 포인트로 응답이 올바른지 확인하는 방법, 사용자의 속도 및 응답 시간을 측정하는 트랜잭션을 삽입하는 방법을 배웠습니다. 행동과 다른 것들.
이를 통해 거의 모든 웹 애플리케이션에 대한 스크립트를 성공적으로 작성할 수 있어야합니다.
=> LoadRunner 자습서의 전체 시리즈를 보려면 여기를 클릭하십시오.
LR 언어
VuGen 스크립트에서 더 까다로운 작업을 수행해야하는 상황이있을 수 있습니다. 이 자습서에서는 스크립팅 문제와이를 처리하는 데 사용할 수있는 기술에 대해 설명합니다.
이에 대해 논의하기 전에 몇 가지 사항을 이해합시다. VuGen (또는 Load Runner)은 자체 언어 만 이해할 수 있습니다 (이를 LR 언어라고 부르겠습니다. LR은 Load Runner의 약식입니다). 따라서 생성하는 스크립트는 LR 언어라고 할 수 있습니다. LR 언어에는 문자열 (더 정확하게는 'LR 문자열')이라는 하나의 데이터 유형 만 있습니다.
이제 VuGen 스크립트를 개선하기 위해 일반적으로 C 언어를 사용합니다.
C 언어에는 int, char, float, long 등과 같은 많은 데이터 유형이 있다는 것을 알고 있습니다. 요청에서 C 값을 직접 정의하고 사용하는 경우 VuGen은 이해하지 못하고 ( 'LR 문자열'만 이해하므로) 던질 것입니다. 오류. 따라서 모든 데이터 유형의 C 값을 요청에 사용하기 전에 'LR 문자열'로 변환해야합니다.
Windows에서 eps 파일을 여는 방법
이것을 이해했으면 실시간으로 어려운 시나리오를 살펴 보겠습니다.
시나리오 1 :VuGen 요청에서 C 문자열을 사용하는 방법
VuGen 스크립트에‘PlanName’이라는 필드가있는 요청이 있다고 가정 해 보겠습니다 (이 스크립트는 일부 재무 계획 응용 프로그램 용이라고 가정). 녹화하는 동안 값을 'NewPlan'으로 입력했습니다.
web_submit_data('MyPlan', 'Action= {pURL} ', 'Method= POST ', 'TargetFrame=', 'RecContentType= text/html ', 'Snapshot= t21.inf ', 'Mode= HTML ', ITEMDATA , 'Name= PlanId ', 'Value= 67213 ', ENDITEM , 'Name= PlanName ', 'Value= NewPlan ', ENDITEM , 'Name= Age ', 'Value= 57 ', ENDITEM , 'Name= MaritalStaus ', 'Value= Married ', ENDITEM , LAST );
사용자 정의 문자열을 계획 이름으로 사용하고 싶다고 가정 해 보겠습니다.
따라서 아래와 같이 문자열을 선언하고 정의해야합니다.
char sPlanName[] = ' MyFinancialPlan ';
‘sPlanName’은 C 문자열이므로 LR 문자열로 변환해야합니다 (요청에서 사용하기 위해).
아래와 같이‘lr_save_string’함수를 사용하여이를 수행합니다.
lr_save_string(sPlanName,”LRPlanName”);
이 기능은 LR 매개 변수 / 변수에 값을 할당합니다. 두 가지 속성이 필요합니다. 첫 번째 속성은 소스 (C 문자열)이고 두 번째 속성은 대상 (LR 매개 변수 / 변수)입니다.
따라서이 함수는 우리가 정의한 C 변수의 값을 LR 매개 변수‘LRPlanName’에 저장합니다.
이제 VuGen 요청의 다른 매개 변수처럼‘LRPlanName’을 대체 할 수 있습니다.
web_submit_data('MyPlan', 'Action= {pURL} ', 'Method= POST ', 'TargetFrame=', 'RecContentType= text/html ', 'Snapshot= t21.inf ', 'Mode= HTML ', ITEMDATA , 'Name= PlanId ', 'Value= 67213 ', ENDITEM , 'Name= PlanName ', 'Value= {LRPlanName} ', ENDITEM , 'Name= Age ', 'Value= 57 ', ENDITEM , 'Name= MaritalStaus ', 'Value= Married ', ENDITEM , LAST );
이 스크립트를 실행할 때 모든 Vuser 및 모든 반복은 계획 이름과 동일한 값을 사용합니다. 따라서 각 실행에 고유 한 계획 이름을 만들기 위해 다음과 같이 할 수 있습니다.
char sPlanName[] = ' MyFinancialPlan _{pVuserId}_{pIteration}'; lr_save_string( lr_eval_string(sPlanName),'LRPlanName' );
여기서‘pVuserId’및‘pIteration’은‘Vuser ID’및‘반복 번호’매개 변수입니다 (이전 자습서의 매개 변수 유형에서 논의 했음). 이들은 각 Vuser 및 반복에 대해 고유 한 이름을 갖도록 계획 이름에 사용됩니다.
그만큼 ‘lr_eval_string’ 함수는 포함 된 매개 변수를 평가 한 후 입력 문자열을 반환합니다. 따라서이 경우이 함수의 출력은 첫 번째 Vuser 첫 번째 반복의 경우 'MyFinancialPlan_1_1', 첫 번째 Vuser 두 번째 반복의 경우 'MyFinancialPlan_1_2'등이됩니다.
물론 우리는 ‘lr_save_string’ 기능은 않습니다.
이제 위와 같이‘LRPlanName’매개 변수를 대체 할 수 있습니다.
시나리오 2 :로드 러너 변수를 C 정수로 변환하는 방법
지난 튜토리얼에서는 조건에 따라 트랜잭션을 수동으로 전달하거나 실패하는 방법을 이해하는 예제를 보았습니다.
예:
web_reg_find('Text= Welcome ','SaveCount= WelcomeCount ', LAST ); web_submit_data('login.pl', 'Action= http://127.0.0.1:1080/cgi-bin/login.pl ', 'Method= POST ', 'TargetFrame= body ', 'RecContentType= text/html ', 'Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in= home ', 'Snapshot= t2.inf ', 'Mode= HTML ', ITEMDATA , 'Name= userSession ', 'Value= {corUserSession} ', ENDITEM , 'Name= username ', 'Value= jojo ', ENDITEM , 'Name= password ', 'Value= bean ', ENDITEM , 'Name= JSFormSubmit ', 'Value= off ', ENDITEM , 'Name= login.x ', 'Value= 66 ', ENDITEM , 'Name= login.y ', 'Value= 12 ', ENDITEM , LAST ); if( atoi (lr_eval_string('{WelcomeCount}'))>0) { lr_end_transaction('Login', LR_PASS ); } else { lr_end_transaction('Login', LR_FAIL ); }
여기서는 'SaveCount'속성과 함께 'if 문'을 사용했습니다. 텍스트 발생 횟수를 저장하는‘WelcomeCount’매개 변수는로드 러너 문자열이므로‘if’조건에서 직접 사용할 수 없습니다. 따라서이 매개 변수를 먼저 C 문자열로 변환 한 다음 C 정수로 변환해야합니다. ‘lr_eval_string’ 과 ‘아토이’ 이를 처리하기 위해 (각각) 함수가 사용됩니다.
그만큼 ‘아토이’ C 함수는 C 문자열을 C 정수로 변환합니다.
이 변환 후에는 다른 C 정수처럼 사용할 수 있습니다.
시나리오 3 :요청에서 임의의 값을 보내는 방법
종종 우리는 임의의 값 (예 : 드롭 다운)을 선택해야하는 애플리케이션 시나리오를 사용합니다. VuGen 스크립트에서 어떻게 처리합니까? 모든 반복에 대해 임의의 값이 선택되도록하려면 어떻게해야합니까? 자세히 살펴 보겠습니다.
'웹 투어'애플리케이션의 예를 들어 보겠습니다. 앞서 살펴본 것처럼 항공편을 선택해야하는 '항공편 찾기'페이지가 있습니다.
목록에서 첫 번째 항목을 선택한다고 가정 해 보겠습니다. 스크립트의 해당 요청은 다음과 같습니다 (항공편에 해당하는 값이 선택됨).
web_submit_data('reservations.pl_2', 'Action= http://127.0.0.1:1080/cgi-bin/reservations.pl ', 'Method= POST ', 'TargetFrame=', 'RecContentType= text/html ', 'Referer= http://127.0.0.1:1080/cgi-bin/reservations.pl ', 'Snapshot= t5.inf ', 'Mode= HTML ', ITEMDATA , 'Name= outboundFlight ', 'Value= 020 ;338;04/03/2018', ENDITEM , 'Name= numPassengers ', 'Value= 1 ', ENDITEM , 'Name= advanceDiscount ', 'Value= 0 ', ENDITEM , 'Name= seatType ', 'Value= Coach ', ENDITEM , 'Name= seatPref ', 'Value= None ', ENDITEM , 'Name= reserveFlights.x ', 'Value= 39 ', ENDITEM , 'Name= reserveFlights.y ', 'Value= 10 ', ENDITEM , LAST );
먼저 이전 응답 중 하나에서 4 개의 모든 항공편에 대한 해당 값을 캡처해야합니다. 응답이 이러한 값을 갖는 요청 전에‘ORD = ALL’속성과 함께 상관 함수 (web_reg_save_param)를 사용하여이를 수행 할 수 있습니다.
이것의 출력은 상관 매개 변수 'cFlight'에 4 개의 비행에 해당하는 4 개의 값 배열이있는 경우와 같습니다.
다음 단계는 이러한 값 중 하나를 무작위로 선택하고 요청에 제출하는 것입니다. 이것은 사용하여 수행 할 수 있습니다. ‘lr_paramarr_random’ 기능은 아래와 같습니다.
strcpy (flightVal,lr_eval_string(lr_paramarr_random('cFlight')));
입력 ‘lr_paramarr_random’ 함수는 매개 변수 배열이고 출력은이 배열의 임의 값입니다. 이 함수의 출력은 네 가지 비행 값 중 하나입니다. 그리고이 임의의 값이 LR 문자열이므로‘lr_eval_string’함수가 사용됩니다 (동일한 값을 C 문자열로 변환).
‘strcpy’ C 함수는 마지막으로이 값을 C 문자열 변수 'flightVal'에 복사합니다.
이제 다시이 C 문자열 변수를 LR 문자열로 변환하여 요청을 보낼 수 있습니다.
lr_save_string(flightVal,'randomFlight'); web_submit_data('reservations.pl_2', 'Action= http://127.0.0.1:1080/cgi-bin/reservations.pl ', 'Method= POST ', 'TargetFrame=', 'RecContentType= text/html ', 'Referer= http://127.0.0.1:1080/cgi-bin/reservations.pl ', 'Snapshot= t5.inf ', 'Mode= HTML ', ITEMDATA , 'Name= outboundFlight ', 'Value= {randomFlight} ', ENDITEM , 'Name= numPassengers ', 'Value= 1 ', ENDITEM , 'Name= advanceDiscount ', 'Value= 0 ', ENDITEM , 'Name= seatType ', 'Value= Coach ', ENDITEM , 'Name= seatPref ', 'Value= None ', ENDITEM , 'Name= reserveFlights.x ', 'Value= 39 ', ENDITEM , 'Name= reserveFlights.y ', 'Value= 10 ', ENDITEM , LAST );
시나리오 4 :문자열을 토큰으로 분할하는 방법
문자열을 조각 / 토큰으로 분할해야하는 시나리오가 있다고 가정 해보십시오. '웹 투어'애플리케이션의 예를 들어 항공편 값에서 020 ; 338; 04/03/2018에서는‘338’만 사용해야한다고 말한 다음이 문자열을 분할하여 변수에 저장해야합니다.
이것을하기 위해 ‘strtok’ 기능이 사용됩니다.
’strtok’ C 함수는 지정된 문자로 구분 된 문자열에서 토큰을 반환합니다. 첫 번째 호출 후 다음 토큰을 얻으려면 문자열 값으로 'NULL'을 전달해야합니다. 아래 예는이 함수를 사용하여 세미콜론 (;) 구분 기호를 기준으로 비행 값을 분할하는 방법을 보여줍니다.
예:
비행 값이 관련 응답에서 'cFlight'매개 변수로 캡처되었다고 가정 해 보겠습니다.
char string[100]; char *token; int i=1; strcpy(string,lr_eval_string('{cFlight}')); token=(char *)strtok(string,';'); lr_output_message('Token %d is %s',i,token); while(token != NULL) { i=i+1; token=(char *)strtok(NULL,';'); lr_output_message('Token %d is %s',i,token); }
이것의 출력은 재생 로그에서 볼 수 있습니다.
필요한 토큰을 매개 변수에 복사하여 사용할 수 있습니다.
시나리오 5 :텍스트 파일에서 데이터를 읽고 쓰는 방법
때로는 외부 파일에서 데이터를 읽거나 외부 파일에 데이터를 써야 할 수도 있습니다. VuGen 스크립트에서이 작업을 수행하는 방법을 살펴 보겠습니다.
먼저 텍스트 파일에서 데이터를 읽는 방법을 살펴 보겠습니다.
예: 외부 데이터 파일에서 XML을 읽어 스크립트에서 요청으로 사용해야한다고 가정 해 보겠습니다.
이를 위해 우리는 ‘공포’ C 기능.
이 함수는 다음 네 가지 속성을 사용합니다.
완충기 – 데이터 스트림을 저장할 버퍼.
크기 – 버퍼의 크기.
카운트 – 읽을 바이트 수.
파일 포인터 – 파일 포인터
동일한 예제 코드 (주석 포함)
char buffer[1000]; //The buffer to store the read data stream char *filename = 'C:\Temp\mysamplefile.txt'; /* name and path of the file to be read from */ char * accessmode = 'r'; /* access mode r /r+ = open for reading , w /w+ = open for writing ,a /a+ = open for appending */ /* '+' sign indicates that the file must already exist */ long filepointer; /* declaring a file pointer */ int count=500; /* number of bytes to be read */ filepointer = fopen (filename, accessmode); /* open file in read mode */ fread (buffer,sizeof(char),count,filepointer); /* read from output file */ lr_save_string(buffer,'requestbody'); //we can use this as a LR parmeter and can use in the script now fclose (filepointer); //close the file pointer
위에 표시된 코드에서 텍스트 파일에서 500 바이트를 읽었습니다. 분명히 우리는 파일 크기를 항상 알지 못할 수도 있습니다. 그래서 우리는 ‘fseek’ 과 ‘ftell’ C 함수 (탐색 할 수 있도록 남겨 두겠습니다) 파일의 크기를 찾고 '카운트' 의 속성 ‘공포’ 그에 따라 기능합니다.
이제 텍스트 파일에 데이터를 쓰는 방법을 살펴 보겠습니다.
예: 주문을 생성하고 'orderid'를 생성하는 스크립트가 있다고 가정 해 보겠습니다. 테스트에서 스크립트로 생성 된 모든 주문 ID를 알고 싶다면 스크립트가 이러한 주문 ID를 외부 텍스트 파일에 복사하도록 할 수 있습니다.
‘fprintf’ – C 함수는 형식화 된 출력을 파일에 기록합니다.
이 함수는 다음 속성을 사용합니다.
파일 포인터 – 파일 포인터
형식 _ 문자열 – 파일에 쓸 형식화 된 문자열.
args – 하나 이상의 선택적 인쇄 인수.
예제 코드는 다음과 같습니다. 'orderid'를 매개 변수 'cOrderId'에 연관시켜 저장했다고 가정 해 보겠습니다.
예:
char *filename = 'C:\Temp\mysamplefile.txt'; /* name and path of the file to be created or edited */ char * accessmode = 'a+'; /* access mode r /r+ = open for reading , w /w+ = open for writing ,a /a+ = open for appending */ /* '+' sign indicates that the file must already exist */ long filepointer; /* declaring a file pointer */ filepointer = fopen (filename, accessmode); /* open file in append mode */ fprintf (filepointer, '%s
', lr_eval_string('{cOrderId}')); /* write orders id to output file */ fclose (filepointer); /* close the file pointer */
희망, 우리는 이제 외부 파일에서 데이터를 읽거나 외부 파일에 데이터를 쓰는 개념에 능숙합니다 (물론 위에서 논의한 것과 동일한 작업을 수행하는 다른 방법이있을 수 있습니다). 많은 실시간 시나리오에서 매우 많이 필요하므로 C에서 파일 작업에 대한 철저한 연구를 수행하는 것이 매우 유용 할 것입니다 (좋은 C 자습서 또는 책을 참조 할 수 있음).
시나리오 6 :경계가 변경 될 때 상관 관계를 처리하는 방법
Correlations 자습서에서 경계 기반 상관 함수를 사용하여 응답에서 동적 값을 캡처했습니다. 하지만 경계가 바뀌는 시나리오가 있다면 어떨까요? 이러한 상황을 처리하는 방법에는 여러 가지가 있습니다. 자세히 살펴 보겠습니다.
a)‘IC’,‘DIG’및‘ALNUM’플래그 사용 :
IC – 이 플래그는 VuGen이 왼쪽 / 오른쪽 경계의 대소 문자를 무시하도록 지시합니다.
예: 왼쪽 경계가 때때로 대문자이고 때로는 소문자 인 경우이 플래그를 사용합니다.
web_reg_save_param ('corUserSession','LB/IC= name='userSession' value='','RB='/>', LAST);
당신- 이 플래그는 VuGen이 왼쪽 / 오른쪽 경계에서 와일드 문자 '#'이 사용되는 단일 숫자를 고려하도록 지시합니다.
예: 왼쪽 경계 (또는 오른쪽 경계)가 이와 같이 변경되는 경우 (특정 위치에서 하나의 숫자 만).
GJHi3rty
1GJHi8rty
GJHi7rty
숫자 변경을 처리하므로 아래와 같이 'DIG'플래그를 사용할 수 있습니다.
LB / DIG = GJHi # rty
알더- 이 플래그는 VuGen이 왼쪽 / 오른쪽 경계에서 와일드 문자 '^'가 사용되는 단일 영숫자 문자를 고려하도록 지시합니다.
예: 왼쪽 경계 (또는 오른쪽 경계)가 이와 같이 변경되는 경우 (특정 위치에서 하나의 영숫자 문자 만).
유닉스에서 grep 명령을 사용하는 방법
GJHi3rty
GJHiKrty
GJHitrty
변경되는 영숫자 문자를 처리하므로 아래와 같이‘ALNUM’플래그를 사용할 수 있습니다.
LB / ALNUM = GJHi ^ rty
또한 'ALNUM'및 'IC'인 'ALNUMIC'과 같이 두 개의 플래그를 함께 사용할 수 있습니다.
b)‘SaveLen’및‘SaveOffset’속성 사용 :
이 두 가지 속성을 ‘web_reg_save_param’ 왼쪽 / 오른쪽 경계의 정적 부분 만 입력하도록 적절하게 기능합니다.
c) 정규 표현식 사용 :
우리는 사용할 수 있습니다 ‘web_reg_save_param_regexp’ 정규식과 일치하는 동적 값 (매개 변수에)을 저장하는 상관 함수.
예: 캡처하려는 동적 값이 주어진 텍스트에서‘3959339’라고 가정 해 보겠습니다.
PriceControl_ctl01“Name = jack”,“Refid = 3959339”잔액
위의 '이름'과 같은 필드의 값과 길이가 변경 될 수 있기 때문에 여기서 경계 기반 상관 함수를 사용할 수 없습니다 (따라서 왼쪽 또는 오른쪽 경계에서 사용할 수 없습니다).
우리는 ‘web_reg_save_param_regexp’ 이 문제를 해결하기 위해 아래와 같이 상관 함수를 사용합니다.
web_reg_save_param_regexp('ParamName=corName', 'RegExp= PriceControl_ctl01 'Name=([a-z]+)', 'Refid=([0-9]+)' balance', 'Group=1','Ordinal=All', LAST);
정규식 그룹은 괄호로 묶이고 '그룹'속성은 지정된 매개 변수 (첫 번째 속성에서)에 해당하는 일치 항목을 저장할 때 고려할 그룹을 결정합니다.
다음은 몇 가지 정규 표현식 일치입니다.
d – 단일 숫자와 일치
w – 단일 단어와 일치
[A-Z] + – 대문자로 된 모든 단어와 일치
[a-z] + – 소문자로 된 모든 단어와 일치
[0-9] + – 모든 숫자 값과 일치
시나리오 7 :VuGen 스크립트에서 함수를 작성하고 사용하는 방법
다른 프로그래밍 언어와 마찬가지로 함수를 수동으로 작성 / 정의하고 (일반적으로 사용자 정의 함수라고 함) VuGen 스크립트의 어느 곳에서나 사용할 수 있습니다.
특정 스크립트의 모든 요청에서 고유 한 계획 이름을 보내야한다고 가정 해 보겠습니다. 따라서 (고유 한 이름을 생성하는) 필수 코드를 여러 번 작성하는 대신, (고유 한 이름을 생성하는) 함수를 정의하고 VuGen 스크립트에서 필요할 때마다 (그리고 어디서든) 호출 할 수 있습니다.
VuGen 스크립트의 함수는 모든 작업 내부에 작성 될 수 있지만 일반적으로 ‘Globals.h’ 파일 (VuGen 스크립트의 추가 파일 섹션 아래) 또는 새로 생성 된 파일 내부 (동일한 '추가 파일'섹션 아래). 일단 작성된 함수는 모든 액션에서 호출 할 수 있습니다.
아래 이미지는‘globals.h’파일 내에 작성된 사용자 정의 함수‘MyFunction’을 보여줍니다.
위에서 설명한 것처럼 다른 방법은 새 파일을 만들고 그 안에 함수를 작성하는 것입니다.
새 파일을 만들 때 기억해야 할 것은 'globals.h'파일에 포함해야한다는 것입니다 (VuGen에서이 파일을 인식하지 못함).
결론
따라서이 튜토리얼에서 우리는 VuGen 스크립팅에서 몇 가지 실시간 문제를 처리하는 방법을 보았으며 다양한 애플리케이션에서 작업 할 때 분명히 다른 많은 시나리오를 접하게 될 것입니다.
또한 다양한 시나리오를 처리 할 때 C 문자열 함수와 C 파일 작업이 매우 필요하고 유용하다는 것을 깨달았을 것입니다. 그러나 나는 이것들을 숙달하는 데 시간을 할애하는 것이 좋습니다.
다음 튜토리얼에서는 VuGen 스크립트에서 사용되는 몇 가지 중요한 미리 정의 된 함수를보고 이해할 것입니다 (일부 함수는 이미 보았습니다).
=> LoadRunner 튜토리얼의 전체 시리즈를 보려면 여기를 방문하십시오
추천 도서
- LoadRunner VuGen 스크립팅을 사용한 웹 서비스 성능 테스트
- 고급 Unix 쉘 스크립팅 : 배열, 파일 및 문자열 테스트 연산자, 특수 변수
- HP LoadRunner 자습서를 사용한 부하 테스트
- LoadRunner의 VUGen 기록 옵션
- LoadRunner VuGen 스크립트 파일 및 런타임 설정을 설정하는 방법
- 예제와 함께 VuGen 스크립트에서 사용되는 중요한 LoadRunner 함수
- Micro Focus LoadRunner 소개-LoadRunner를 사용한 부하 테스트 자습서 # 1
- JMeter BeanShell 스크립팅 2 부