loadrunner vugen scripting challenges
Úvod do výziev spojených s skriptovaním LoadRunner VuGen:
V tomto Informatívna školiaca séria LoadRunner , preskúmali sme asi Vylepšenia skriptov VuGen v našom predchádzajúcom návode. Od našich predchádzajúcich tutoriálov až doteraz sme s VuGenom dosiahli veľký pokrok.
Naučili sme sa, ako zaznamenať skript do webového protokolu HTTP / HTML, ako sa starať o dáta / hodnoty pomocou korelácie a parametrizácie, ako zabezpečiť, aby bola odpoveď správna s kontrolnými bodmi, ako vložiť transakcie, ktoré merajú rýchlosť a čas odozvy používateľa. činy a iné veci.
Vďaka nim by sme mali byť schopní úspešne vytvárať skripty pre takmer všetky webové aplikácie.
=> Kliknutím sem zobrazíte kompletnú sériu tutoriálov LoadRunner
Jazyk LR
Môžu sa vyskytnúť situácie, keď budeme musieť v skripte VuGen robiť náročnejšie úlohy. V tomto tutoriáli sa budeme zaoberať niektorými výzvami skriptovania spolu s technikami dostupnými na ich zvládnutie.
Predtým, ako o nich diskutujeme, pochopme niekoľko vecí. VuGen (alebo Load Runner) dokáže porozumieť iba svojmu vlastnému jazyku (nazvime ho ako jazyk LR, LR je skrátená forma aplikácie Load Runner). Takže o generovanom skripte sa dá povedať, že je v jazyku LR. V jazyku LR existuje iba jeden dátový typ - String (a presnejšie „LR String“).
Teraz, aby sme mohli vylepšiť skript VuGen, zvyčajne používame jazyk C.
Vieme, že v jazyku C existuje veľa dátových typov ako int, char, float, long atď. Ak v žiadosti priamo definujeme a použijeme hodnoty C, VuGen nebude rozumieť (pretože chápe iba „reťazce LR“) a bude hádzať chyba. Pred použitím v žiadosti teda musíme previesť ľubovoľnú hodnotu C (ľubovoľného údajového typu) na „reťazec LR“.
Keď sme to pochopili, poďme k niektorým náročným scenárom v reálnom čase.
Scenár 1:Ako používať reťazec C v žiadosti VuGen
Predpokladajme, že vo skripte VuGen máme požiadavku, ktorá má pole s názvom „PlanName“ (predpokladajme, že tento skript je pre niektoré aplikácie finančného plánovania). Počas nahrávania sme zadali hodnotu ako „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 );
Povedzme, že ako názov plánu chceme použiť používateľom definovaný reťazec.
Takže musíme deklarovať a definovať reťazec, ako je uvedené nižšie
char sPlanName() = ' MyFinancialPlan ';
„SPlanName“ je reťazec C, a preto ho musíme previesť na reťazec LR (aby sme ho mohli použiť v žiadosti).
Robíme to pomocou funkcie „lr_save_string“, ako je uvedené nižšie:
lr_save_string(sPlanName,”LRPlanName”);
Táto funkcia priradí hodnotu parametru / premennej LR. Má dva atribúty - Prvý atribút je zdroj (C String) a druhý atribút je cieľový (parameter / premenná LR).
Táto funkcia teda uloží hodnotu premennej C, ktorú sme definovali, do parametra LR „LRPlanName“.
Teraz môžeme nahradiť „LRPlanName“ ako ktorýkoľvek iný parameter v žiadosti o VuGen.
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 );
Upozorňujeme, že keď spustíme tento skript, všetky Vusery a všetky iterácie budú mať rovnakú hodnotu ako názov plánu. Takže aby bol názov plánu pre každý beh jedinečný, môžeme urobiť niečo také.
char sPlanName() = ' MyFinancialPlan _{pVuserId}_{pIteration}'; lr_save_string( lr_eval_string(sPlanName),'LRPlanName' );
Tu sú „pVuserId“ a „pIteration“ parametre „Vuser ID“ a „Iteration Number“ (o ktorých sme hovorili v typoch parametrov v našich predchádzajúcich tutoriáloch). Používajú sa v názve plánu, aby sme zaistili, že máme jedinečné názvy pre každého Vusera a iteráciu.
The „Lr_eval_string“ funkcia vráti vstupný reťazec po vyhodnotení všetkých vložených parametrov. Takže v tomto prípade bude výstupom tejto funkcie „MyFinancialPlan_1_1“ pre prvú iteráciu Vuser, „MyFinancialPlan_1_2“ pre prvú iteráciu Vuser a tak ďalej.
A samozrejme, vieme čo „Lr_save_string“ funkcia robí.
Teraz môžeme nahradiť parameter „LRPlanName“, ako je uvedené vyššie.
Scenár 2:Ako previesť premennú bežec zaťaženia na celé číslo C.
V minulom návode sme videli príklad na pochopenie toho, ako manuálne odovzdávame alebo zlyhávame transakcie v závislosti od podmienky.
Príklad:
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 ); }
Použili sme tu výraz „if“ s atribútom „SaveCount“. Parameter „WelcomeCount“, ktorý šetrí počet výskytov textu, nemožno použiť priamo v stave „if“, pretože ide o reťazec načítania. Takže tento parameter musí byť najskôr prevedený na reťazec C a potom na celé číslo C. „Lr_eval_string“ a „Atoi“ sa o to postarajú (respektíve) funkcie.
The „Atoi“ Funkcia C prevádza reťazec C na celé číslo C.
Po tejto konverzii sa dá použiť ako každé iné celé číslo C.
Scenár 3:Ako poslať náhodnú hodnotu v žiadosti
Veľmi často prichádzame okolo aplikačných scenárov, kde musíme zvoliť náhodnú hodnotu (povedzme z rozbaľovacej ponuky). Ako to zvládneme v skriptoch VuGen? Ako zabezpečíme, aby bola pre každú iteráciu vybraná náhodná hodnota? Pozrime sa na to podrobne.
Zoberme si príklad našej aplikácie „Webové prehliadky“. Ako sme už videli skôr, máme stránku „Nájsť let“, kde musíme zvoliť let.
Povedzme, že vyberieme prvý v zozname. Zodpovedajúca požiadavka v skripte je taká (kde je vybratá zodpovedajúca hodnota letu).
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 );
Najprv musíme zachytiť zodpovedajúce hodnoty pre všetky štyri lety z jednej z predchádzajúcich odpovedí. Môžeme to urobiť pomocou korelačnej funkcie (web_reg_save_param) s atribútom ‘ORD = ALL’ pred požiadavkou, ktorej odpoveď má túto hodnotu.
Výstup bude taký, že korelovaný parameter „cFlight“ má pole štyroch hodnôt zodpovedajúcich štyrom letom.
Ďalším krokom by bol náhodný výber jednej z týchto hodnôt a odoslanie v žiadosti. To je možné vykonať pomocou „Lr_paramarr_random“ funkcie, ako je uvedené nižšie.
strcpy (flightVal,lr_eval_string(lr_paramarr_random('cFlight')));
Vstup do „Lr_paramarr_random“ funkcia je pole parametrov a výstupom je náhodná hodnota z tohto poľa. Takže tu je výstupom tejto funkcie jedna zo štyroch letových hodnôt. A keďže táto náhodná hodnota je reťazec LR, použije sa funkcia „lr_eval_string“ (na jej konverziu do reťazca C).
‘Strcpy’ Funkcia C túto hodnotu nakoniec skopíruje do premennej reťazca C „flightVal“.
Teraz opäť musíme túto premennú reťazca C previesť na reťazec LR, aby sme mohli žiadosť odoslať.
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 );
Scenár 4:Ako rozdeliť reťazec na žetóny
Povedzme, že existuje scenár, keď musíme reťazec rozdeliť na kúsky / tokeny. Vezmime si príklad z našej aplikácie „Webové prehliadky“, kde z hodnoty letu 020 ; 338; 04/03/2018 hovorí, že musíme použiť iba „338“, potom musíme tento reťazec rozdeliť a uložiť do premennej.
Urobiť toto ‘Strtok’ funkcia sa používa.
‘Strtok’ Funkcia C vráti token z reťazca ohraničeného zadanými znakmi. Po prvom vyvolaní musíme ako hodnotu reťazca zadať hodnotu „NULL“, aby sme získali ďalší token. Nasledujúci príklad ukazuje, ako sa táto funkcia používa na rozdelenie hodnoty letu na základe bodkočiarky (;).
Príklad:
Predpokladajme, že letová hodnota je zachytená z príslušnej odpovede do parametra „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); }
Výstup z toho je viditeľný v denníku opakovania.
Môžeme skopírovať požadovaný token do parametra a použiť ho.
Scenár 5:Ako čítať údaje z textového súboru a zapisovať ich do textového súboru
Niekedy môže byť potrebné prečítať údaje z externého súboru alebo zapísať dáta do externého súboru. Pozrime sa, ako to urobíme v skripte VuGen.
Najprv sa pozrime, ako čítať údaje z textového súboru.
Príklad: Povedzme, že musíme načítať XML z externého dátového súboru a použiť ho ako požiadavku v skripte.
K tomu používame „Strach“ Funkcia C.
Táto funkcia má štyri atribúty:
nárazník - Buffer, do ktorého sa má ukladať dátový tok.
veľkosť - Veľkosť medzipamäte.
počítať - Počet bytov na prečítanie.
file_pointer - Ukazovateľ súboru
Príklad kódu (s komentármi) pre to isté
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
Upozorňujeme, že v kóde zobrazenom vyššie sme z textového súboru načítali 500 bajtov. Je zrejmé, že veľkosť súboru nemusíme vedieť vždy. Môžeme teda použiť „Fseek“ a ‘Ftell’ Funkcie C (ponechám na preskúmanie), aby som zistil veľkosť súboru a použil „Počítať“ atribút „Strach“ podľa toho fungujú.
Teraz sa pozrime, ako zapisovať údaje do textového súboru.
Príklad: Povedzme, že máme skript, ktorý vytvára objednávky a generuje „orderid“. Ak chceme v teste poznať všetky ID objednávok vytvorené naším skriptom, môžeme náš skript nechať skopírovať tieto ID objednávok do externého textového súboru.
„Fprintf“ - Funkcia C zapíše formátovaný výstup do súboru.
Táto funkcia má tieto atribúty:
file_pointer - Ukazovateľ súboru
format_string - Naformátovaný reťazec na zápis do súboru.
args - Jeden alebo viac voliteľných argumentov pre tlač.
Vzorový kód je uvedený nižšie. Predpokladajme, že sme „orderid“ spojili a uložili do parametra „cOrderId“.
Príklad:
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 */
Dúfam, že sme teraz v koncepcii čítania údajov alebo zápisu údajov do externého súboru v poriadku (samozrejme môžu existovať aj iné spôsoby, ako robiť to isté, ako sme diskutovali vyššie). Bolo by veľmi užitočné urobiť si dôkladnú štúdiu o operáciách so súbormi v jazyku C (môžete si prečítať akékoľvek dobré výukové programy alebo knihy v jazyku C), ktoré sú veľmi potrebné v mnohých scenároch v reálnom čase.
Scenár 6:Ako zvládnuť koreláciu, keď sa hranice menia
V tutoriáli Korelácie sme na zachytenie dynamických hodnôt z odpovede použili hraničné korelačné funkcie. Čo však v prípade, že máme scenár, v ktorom sa hranice menia? Existuje niekoľko spôsobov riešenia takýchto situácií. Pozrime sa na tieto podrobnosti.
a) Používanie príznakov „IC“, „DIG“ a „ALNUM“:
IC - Tento príznak dáva VuGenu pokyn ignorovať veľké a malé písmená na hranici zľava / doprava.
Príklad: Ak je ľavá hranica niekedy veľkými a niekedy malými písmenami, použijeme tento príznak.
web_reg_save_param ('corUserSession','LB/IC= name='userSession' value='','RB='/>', LAST);
VY - Tento príznak dáva VuGenu pokyn, aby zvážil každé jednotlivé číslo, kde sa v ľavom / pravom okraji používa divoký znak „#“.
čo je užívateľské testovanie pri testovaní softvéru?
Príklad: Ak sa takto mení ľavá hranica (alebo pravá hranica) (iba jedno číslo na konkrétnej pozícii).
GJHi3rty
1GJHi8rty
GJHi7rty
Ako je uvedené nižšie, môžeme použiť príznak DIG, ktorý sa postará o meniace sa číslo.
LB / DIG = GJHi # pery
jelša - Tento príznak dáva VuGenu pokyn, aby zvážil akýkoľvek jeden alfanumerický znak, kde sa v ľavom / pravom okraji používa divoký znak „^“.
Príklad: Ak sa takto mení ľavá hranica (alebo pravá hranica) (iba jeden alfanumerický znak na konkrétnej pozícii).
GJHi3rty
GJHiKrty
GJHitrty
Ako je zobrazené nižšie, môžeme použiť príznak „ALNUM“, ktorý sa postará o zmenu alfanumerického znaku
LB / ALNUM = GJHi ^ pery
Môžeme tiež použiť dva príznaky spolu - napríklad „ALNUMIC“, ktoré je súčasne „ALNUM“ aj „IC“.
b) Používanie atribútov „SaveLen“ a „SaveOffset“:
Môžeme použiť tieto dva atribúty „Web_reg_save_param“ fungovať primerane, aby zadala iba statickú časť ľavého / pravého okraja.
c) Používanie regulárnych výrazov:
Môžeme použiť „Web_reg_save_param_regexp“ korelačná funkcia na uloženie dynamickej hodnoty (do parametra), ktorá sa zhoduje s regulárnym výrazom.
Príklad: Povedzme, že dynamická hodnota, ktorú chceme zachytiť, je z daného textu „3959339“,
PriceControl_ctl01 „Názov = jack“, „Refid = 3959339“ zostatok
Nemôžeme tu použiť hraničnú korelačnú funkciu, pretože hodnota a dĺžka poľa, ako je napríklad „Názov“ vyššie, sa môže meniť (a preto ho nemôžeme použiť v ľavej alebo pravej hranici).
Môžeme použiť „Web_reg_save_param_regexp“ korelačná funkcia uvedená nižšie, aby ste sa o tento problém postarali.
web_reg_save_param_regexp('ParamName=corName', 'RegExp= PriceControl_ctl01 'Name=((a-z)+)', 'Refid=((0-9)+)' balance', 'Group=1','Ordinal=All', LAST);
Skupiny regulárnych výrazov sa dajú do zátvoriek a atribút ‘Group’ rozhoduje, ktorú skupinu treba zvážiť pri ukladaní zodpovedajúcej zhody so zadaným parametrom (v prvom atribúte).
Niekoľko zhôd regulárnych výrazov je uvedených nižšie:
d - zodpovedá jednej číslici
w - zhoduje sa s jedným slovom
(A-Z) + - zhoduje sa s akýmkoľvek slovom napísaným veľkými písmenami
(a-z) + - zhoduje sa s akýmkoľvek slovom malými písmenami
(0-9) + - zodpovedá akejkoľvek číselnej hodnote
Scenár 7:Ako písať a používať funkciu v skripte VuGen
Rovnako ako v každom inom programovacom jazyku, aj tu môžeme napísať / definovať funkciu manuálne (zvyčajne sa nazýva funkcia definovaná používateľom) a použiť ju kdekoľvek v skripte VuGen.
Predpokladajme, že v každej požiadavke konkrétneho skriptu musíme poslať jedinečný názov plánu. Takže namiesto toho, aby sme viackrát napísali požadovaný kód (ktorý generuje jedinečný názov), môžeme definovať funkciu (ktorá generuje jedinečný názov) a volať ho kedykoľvek (a kdekoľvek) v skripte VuGen.
Aj keď funkciu v skripte VuGen možno napísať do akejkoľvek akcie, obvykle sa píše do „Globals.h“ súboru (v sekcii Extra súbory skriptu VuGen) alebo vo vnútri novovytvoreného súboru (v rovnakej sekcii „Extra súbory“). Po napísaní je možné funkciu zavolať z ktorejkoľvek akcie.
Obrázok nižšie zobrazuje používateľom definovanú funkciu „MyFunction“ napísanú v súbore „globals.h“.
Ako už bolo spomenuté vyššie, ďalším spôsobom je vytvorenie nového súboru a zápis funkcie do neho.
Pri vytváraní nového súboru by ste si mali pamätať iba to, že ho musíme zahrnúť do súboru „globals.h“ (bez ktorého VuGen tento súbor nerozpozná).
Záver
V tomto výučbe sme teda videli, ako zvládnuť niektoré výzvy v skriptovaní VuGen v reálnom čase, a pri práci na rôznych aplikáciách by sme samozrejme narazili na mnoho ďalších scenárov.
Tiež by ste si uvedomili, že funkcie reťazca C a operácie so súbormi C sú veľmi potrebné (a užitočné) pri riešení rôznych scenárov. Avšak odporučil by som vám, aby ste im venovali nejaký čas.
V našom ďalšom návode uvidíme a pochopíme niektoré dôležité preddefinované funkcie, ktoré sa používajú v skriptoch VuGen (niektoré z týchto funkcií sme už videli).
=> Navštívte tu kompletnú sériu tutoriálov LoadRunner
Výukový program PREV | NEXT Tutorial
Odporúčané čítanie
- Testovanie výkonu webových služieb pomocou skriptovania LoadRunner VuGen
- Pokročilé skriptovanie Unix Shell: polia, operátory testovania súborov a reťazcov, špeciálne premenné
- Testovanie záťaže s výukovými programami HP LoadRunner
- Možnosti nahrávania VUGen v LoadRunneri
- Ako nastaviť súbory skriptu LoadRunner VuGen a nastavenia runtime
- Dôležité funkcie LoadRunner používané v skriptoch VuGen s príkladmi
- Úvod do aplikácie Micro Focus LoadRunner - Testovanie zaťaženia s príručkou LoadRunner č. 1
- Skriptovanie JMeter BeanShell, časť 2