loadrunner vugen scripting challenges
Inleiding tot de uitdagingen van LoadRunner VuGen Scripting:
In deze Informatieve LoadRunner-trainingsserie , hebben we onderzocht VuGen-scriptverbeteringen in onze vorige tutorial. Van onze eerdere tutorials tot nu toe hebben we grote vooruitgang geboekt met VuGen.
We hebben geleerd hoe je een script opneemt in het Web HTTP / HTML-protocol, hoe je zorgt voor gegevens / waarden met correlatie en parametrisering, hoe je ervoor zorgt dat de respons correct is met checkpoints, hoe je transacties invoegt die de snelheid en responstijd van de gebruiker meten acties en andere dingen.
Hiermee zouden we met succes scripts moeten kunnen maken voor bijna alle webtoepassingen.
Klik hier voor een complete serie LoadRunner-zelfstudies
LR taal
Er kunnen situaties zijn waarin we meer uitdagende taken in een VuGen-script moeten uitvoeren. In deze tutorial zullen we enkele van de scripting-uitdagingen bespreken, samen met de technieken die beschikbaar zijn om ze aan te pakken.
Laten we, voordat we deze bespreken, een paar dingen begrijpen. VuGen (of Load Runner) kan alleen zijn eigen taal begrijpen (laten we dit LR-taal noemen, LR is de korte vorm van Load Runner). Dus welk script het ook genereert, kan in de LR-taal worden genoemd. In de LR-taal is er maar één gegevenstype: String (en meer precies ‘LR String’).
Om verbeteringen aan te brengen in een VuGen-script, gebruiken we over het algemeen de C-taal.
We weten dat er in de C-taal veel gegevenstypen zijn zoals int, char, float, long etc. Als we C-waarden direct definiëren en gebruiken in een verzoek, zal VuGen het niet begrijpen (aangezien het alleen 'LR-strings' begrijpt) en een fout. We moeten dus elke C-waarde (van elk gegevenstype) converteren naar ‘LR-string’ voordat we deze in een verzoek gebruiken.
Nu we dit hebben begrepen, gaan we naar enkele real-time uitdagende scenario's.
Scenario 1:Hoe een C-string te gebruiken in een VuGen-verzoek
Laten we aannemen dat we in een VuGen-script een verzoek hebben met een veld genaamd ‘PlanName’ (neem aan dat dit script voor een financiële planningstoepassing is). Tijdens het opnemen hebben we de waarde ingevoerd als ‘NewPlan’.
Stel dat we een door de gebruiker gedefinieerde string willen gebruiken als de naam van het plan.
We moeten dus een string declareren en definiëren zoals hieronder getoond
De ‘sPlanName’ is een C-string en daarom moeten we deze omzetten in een LR-string (om deze in het verzoek te gebruiken).
We doen dit met de functie ‘lr_save_string’, zoals hieronder weergegeven:
Deze functie kent een waarde toe aan de LR parameter / variabele. Er zijn twee attributen voor nodig: het eerste attribuut is de bron (C String) en het tweede attribuut is de bestemming (LR parameter / variabele).
Dus deze functie slaat de waarde van de C-variabele die we hebben gedefinieerd op in de LR-parameter ‘LRPlanName’.
Nu kunnen we de ‘LRPlanName’ vervangen zoals elke andere parameter in het VuGen-verzoek.
Merk op dat wanneer we dit script uitvoeren, alle Vusers en alle iteraties dezelfde waarde zullen aannemen als de naam van het plan. Dus om de naam van het plan uniek te maken voor elke run, kunnen we zoiets als dit doen.
Hier zijn ‘pVuserId’ en ‘pIteration’ de ‘Vuser ID’ en ‘Iteration Number’ -parameters (die we hebben besproken in parametertypen in onze vorige tutorials). Deze worden gebruikt in de naam van het plan om ervoor te zorgen dat we unieke namen hebben voor elke Vuser en iteratie.
De ‘Lr_eval_string’ functie retourneert de invoertekenreeks na evaluatie van ingesloten parameters. Dus in dit geval zal de output van deze functie ‘MyFinancialPlan_1_1’ zijn voor de eerste Vuser-eerste iteratie, ‘MyFinancialPlan_1_2’ voor de eerste Vuser-tweede iteratie, enzovoort.
En natuurlijk weten we wat ‘Lr_save_string’ functie doet.
Nu kunnen we de parameter ‘LRPlanName’ vervangen zoals hierboven weergegeven.
Scenario 2:Hoe een load-runner-variabele naar C integer te converteren
In de laatste tutorial hebben we een voorbeeld gezien om te begrijpen hoe we een transactie handmatig passeren of mislukken, afhankelijk van een voorwaarde.
Voorbeeld:
We gebruikten hier ‘if statement’ met het kenmerk ‘SaveCount’. De ‘WelcomeCount’ -parameter die het aantal keren dat de tekst voorkomt, opslaat, kan niet rechtstreeks worden gebruikt in de ‘if'-voorwaarde, aangezien het een load-runner-string is. Dus deze parameter moet eerst worden geconverteerd naar een C-string en vervolgens naar een C integer. ‘Lr_eval_string’ en ‘Atoi’ functies worden (respectievelijk) gebruikt om hiervoor te zorgen.
De ‘Atoi’ C-functie converteert een C-string naar een C-geheel getal.
Na deze conversie kan dit worden gebruikt zoals elk ander C-geheel getal.
Scenario 3:Hoe u een willekeurige waarde in een verzoek verzendt
Heel vaak komen we toepassingsscenario's tegen waarbij we een willekeurige waarde moeten selecteren (bijvoorbeeld uit een vervolgkeuzelijst). Hoe gaan we hiermee om in VuGen-scripts? Hoe zorgen we ervoor dat voor elke iteratie een willekeurige waarde wordt geselecteerd? Laten we dit in detail bekijken.
Laten we het voorbeeld nemen van onze ‘Web Tours’ -toepassing. Zoals we eerder zagen, hebben we een ‘Zoek vlucht’ pagina waar we een vlucht moeten selecteren.
Stel dat we de eerste in de lijst selecteren. Het overeenkomstige verzoek in het script is als volgt (waarbij de overeenkomstige waarde voor de geselecteerde vlucht).
We moeten eerst de overeenkomstige waarden vastleggen voor alle vier de vluchten uit een van de vorige antwoorden. We kunnen dit doen met behulp van de correlatiefunctie (web_reg_save_param) met het kenmerk ‘ORD = ALL’ vóór het verzoek waarvan het antwoord deze waarde heeft.
De uitvoer hiervan zal als volgt zijn, waarbij de gecorreleerde parameter ‘cFlight’ een reeks van vier waarden heeft die overeenkomen met de vier vluchten.
De volgende stap zou zijn om willekeurig een van deze waarden te selecteren en in het verzoek in te dienen. Dit kan gedaan worden met ‘Lr_paramarr_random’ functioneren zoals hieronder getoond.
De input voor ‘Lr_paramarr_random’ function is een parameterarray en de uitvoer is een willekeurige waarde uit deze array. Dus hier is de uitvoer van deze functie een van de vier vluchtwaarden. En aangezien deze willekeurige waarde een LR-string is, wordt de functie ‘lr_eval_string’ gebruikt (om deze om te zetten in een C-string).
‘Strcpy’ De functie C kopieert deze waarde tenslotte naar een C-stringvariabele ‘flightVal’.
Nu moeten we deze C String-variabele opnieuw converteren naar LR-string om het verzoek te kunnen verzenden.
Scenario 4:Hoe een string in tokens te splitsen
Stel dat er een scenario is waarin we een string in stukken / tokens moeten splitsen. Laten we het voorbeeld nemen van onze ‘Web Tours’ -toepassing waar van de vluchtwaarde 020 ; 338; 04/03/2018 zeggen dat we alleen ‘338’ hoeven te gebruiken, dan moeten we deze string splitsen en opslaan in een variabele.
Om dit te doen ‘Strtok’ functie wordt gebruikt.
’Strtok’ De functie C retourneert een token uit een tekenreeks die wordt gescheiden door opgegeven tekens. Na de eerste aanroep moeten we ‘NULL’ doorgeven als de waarde van de tekenreeks om het volgende token te krijgen. Het onderstaande voorbeeld laat zien hoe deze functie wordt gebruikt om de vluchtwaarde te splitsen op basis van het puntkomma (;) scheidingsteken.
Voorbeeld:
Laten we aannemen dat de vluchtwaarde wordt vastgelegd uit het relevante antwoord in de parameter ‘cFlight’.
De uitvoer hiervan is te zien in het herhalingslogboek.
We kunnen het vereiste token naar een parameter kopiëren en deze gebruiken.
Scenario 5:Gegevens lezen uit en schrijven naar een tekstbestand
Soms kan het nodig zijn om gegevens uit een extern bestand te lezen of gegevens naar een extern bestand te schrijven. Laten we eens kijken hoe we dit doen in een VuGen-script.
Laten we eerst eens kijken hoe u gegevens uit een tekstbestand kunt lezen.
Voorbeeld: Stel dat we een XML moeten lezen uit een extern gegevensbestand en deze als een verzoek in het script moeten gebruiken.
Hiervoor gebruiken we ‘Bang’ C-functie.
Deze functie heeft vier attributen:
buffer - De buffer waarin de datastroom wordt opgeslagen.
grootte - De grootte van de buffer.
tellen - Het aantal bytes dat moet worden gelezen.
file_pointer - De bestandsaanwijzer
Voorbeeldcode (met opmerkingen) voor hetzelfde
Merk op dat we in de bovenstaande code 500 bytes uit het tekstbestand lezen. Het is duidelijk dat we de bestandsgrootte niet altijd weten. Dus we kunnen gebruiken ‘Fseek’ en ‘Ftell’ C-functies (ik laat dit voor u over om te verkennen) om de grootte van het bestand te vinden en de ‘Tellen’ attribuut van het ‘Bang’ dienovereenkomstig functioneren.
Laten we nu eens kijken hoe we gegevens naar een tekstbestand kunnen schrijven.
Voorbeeld: Stel dat we een script hebben dat orders creëert en ‘orderid’ genereert. Als we alle order-id's willen weten die door ons script in een test zijn gemaakt, kunnen we ons script deze order-id's naar een extern tekstbestand laten kopiëren.
‘Fprintf’ - C-functie schrijft geformatteerde uitvoer naar een bestand.
Deze functie heeft de volgende attributen:
file_pointer - De bestandsaanwijzer
format_string - De opgemaakte tekenreeks om naar het bestand te schrijven.
args - Een of meer optionele afdrukargumenten.
De voorbeeldcode wordt hieronder weergegeven. Laten we aannemen dat we ‘orderid’ hebben gecorreleerd en opgeslagen in de parameter ‘cOrderId’.
Voorbeeld:
Hoop, we zijn nu goed in de concepten van het lezen van gegevens uit of schrijven van gegevens naar een extern bestand (er kunnen natuurlijk andere manieren zijn om hetzelfde te doen dan wat we hierboven bespraken). Het zou erg handig zijn om een grondige studie te doen naar bestandsbewerkingen in C (je kunt verwijzen naar goede C-tutorials of boeken), aangezien deze in veel real-time scenario's erg nodig zijn.
Scenario 6:Hoe om te gaan met correlatie wanneer grenzen veranderen
In de zelfstudie Correlaties hebben we op de grens gebaseerde correlatiefunctie (s) gebruikt om de dynamische waarden uit het antwoord vast te leggen. Maar wat als we een scenario hebben waarin de grenzen veranderen? Er zijn verschillende manieren om met dergelijke situaties om te gaan. Laten we deze in detail bekijken.
a) Gebruik van ‘IC’, ‘DIG’ en ‘ALNUM’ vlaggen:
IC - Deze vlag instrueert VuGen om hoofdletters / kleine letters in de Links / Rechts grens te negeren.
Voorbeeld: Als de linkergrens soms in hoofdletters en soms in kleine letters staat, gebruiken we deze vlag.
U - Deze vlag instrueert VuGen om elk enkel nummer te beschouwen waar het jokerteken ‘#’ wordt gebruikt in de linker- / rechtergrens.
videogamebedrijven om voor te werken
Voorbeeld: Als de linkergrens (of de rechtergrens) op deze manier verandert (slechts één cijfer op een bepaalde positie).
GJHi3rty
1GJHi8rty
GJHi7rty
We kunnen de vlag ‘DIG’ gebruiken, zoals hieronder wordt weergegeven, omdat dat voor het veranderende nummer zorgt.
LB / DIG = GJHi # rty
elzen - Deze vlag instrueert VuGen om elk enkel alfanumeriek teken te beschouwen waarbij het wilde teken ‘^’ wordt gebruikt in de linker- / rechtergrens.
Voorbeeld: Als de linkergrens (of de rechtergrens) op deze manier verandert (slechts één alfanumeriek teken op een bepaalde positie).
GJHi3rty
GJHiKrty
GJHitrty
We kunnen de vlag ‘ALNUM’ gebruiken, zoals hieronder wordt weergegeven, omdat dit zorgt voor het veranderende alfanumerieke teken
LB / ALNUM = GJHi ^ rty
We kunnen ook twee vlaggen samen gebruiken - zoals ‘ALNUMIC’ dat zowel ‘ALNUM’ als ‘IC’ is.
b) Gebruik van ‘SaveLen’ en ‘SaveOffset’ attributen:
We kunnen deze twee attributen van de ‘Web_reg_save_param’ correct functioneren om alleen het statische gedeelte van de linker / rechter grenzen in te voeren.
c) Gebruik van reguliere expressies:
We kunnen gebruiken ‘Web_reg_save_param_regexp’ correlatiefunctie om de dynamische waarde op te slaan (in een parameter) die overeenkomt met een reguliere expressie.
Voorbeeld: Laten we zeggen dat de dynamische waarde die we willen vastleggen ‘3959339’ is van de gegeven tekst,
PriceControl_ctl01 “Name = jack”, “Refid = 3959339” saldo
We kunnen de op de grens gebaseerde correlatiefunctie hier niet gebruiken omdat de waarde en lengte van het veld zoals ‘Naam’ hierboven kan veranderen (en dus kunnen we het niet gebruiken in de linker- of rechtergrens).
We kunnen de ‘Web_reg_save_param_regexp’ correlatiefunctie zoals hieronder weergegeven om dit probleem op te lossen.
De reguliere-expressiegroepen worden tussen haakjes geplaatst en het ‘Group’ -attribuut bepaalt welke groep moet worden overwogen voor het opslaan van de overeenkomstige overeenkomst met de opgegeven parameter (in het eerste attribuut).
Enkele overeenkomsten met reguliere expressies worden hieronder weergegeven:
d - komt overeen met een enkel cijfer
w - komt overeen met een enkel woord
(A-Z) + - komt overeen met elk woord in hoofdletters
(a-z) + - komt overeen met elk woord in kleine letters
(0-9) + - komt overeen met elke numerieke waarde
Scenario 7:Hoe een functie in een VuGen-script te schrijven en te gebruiken
Net als in elke andere programmeertaal, kunnen we een functie handmatig schrijven / definiëren (meestal door de gebruiker gedefinieerde functie genoemd) en deze overal in het VuGen-script gebruiken.
Laten we aannemen dat we bij elk verzoek van een bepaald script een unieke plannaam moeten verzenden. Dus in plaats van de vereiste code (die een unieke naam genereert) meerdere keren te schrijven, kunnen we een functie definiëren (die een unieke naam genereert) en bellen wanneer (en waar dan ook) het nodig is in het VuGen-script.
Hoewel de functie in een VuGen-script binnen elke actie kan worden geschreven, wordt deze doorgaans in het ‘Globals.h’ bestand (onder het gedeelte Extra bestanden van het VuGen-script) of in een nieuw aangemaakt bestand (onder hetzelfde gedeelte 'Extra bestanden'). Eenmaal geschreven, kan de functie worden aangeroepen vanuit elke actie (s).
De onderstaande afbeelding toont een door de gebruiker gedefinieerde functie ‘MyFunction’ geschreven in het ‘globals.h’ bestand.
Zoals hierboven besproken, is de andere manier om een nieuw bestand te maken en de functie erin te schrijven.
Het enige dat u moet onthouden wanneer u een nieuw bestand aanmaakt, is dat we het moeten opnemen in het bestand ‘globals.h’ (zonder welke VuGen dit bestand niet herkent).
Gevolgtrekking
Dus in deze tutorial hebben we gezien hoe we een aantal real-time uitdagingen in VuGen scripting kunnen aanpakken en we zouden natuurlijk veel andere scenario's tegenkomen als we aan verschillende applicaties werken.
Je zou je ook hebben gerealiseerd dat C-stringfuncties en C-bestandsbewerkingen zeer vereist (en nuttig) zijn bij het omgaan met verschillende scenario's. Ik zou je echter aanraden om wat tijd te besteden aan het beheersen hiervan.
In onze volgende tutorial zullen we enkele belangrijke vooraf gedefinieerde functies zien en begrijpen die worden gebruikt in VuGen-scripts (we hebben enkele van de functies al gezien).
Bezoek hier voor een complete serie LoadRunner-zelfstudies
PREV-zelfstudie VOLGENDE zelfstudie
Aanbevolen literatuur
- Prestatietests van webservices met behulp van LoadRunner VuGen-scripts
- Geavanceerde Unix Shell Scripting: arrays, bestands- en stringtestoperatoren, speciale variabelen
- Laadtests met HP LoadRunner-zelfstudies
- VUGen opname-opties in LoadRunner
- Hoe LoadRunner VuGen-scriptbestanden en runtime-instellingen in te stellen
- Belangrijke LoadRunner-functies die worden gebruikt in VuGen-scripts met voorbeelden
- Introductie tot Micro Focus LoadRunner - Load Testing met LoadRunner Tutorial # 1
- JMeter BeanShell Scripting Deel 2