loadrunner vugen scripting challenges
Einführung in die Herausforderungen von LoadRunner VuGen Scripting:
In diesem Informative LoadRunner-Schulungsreihe haben wir erkundet VuGen-Skriptverbesserungen in unserem vorherigen Tutorial. Von unseren früheren Tutorials bis jetzt haben wir mit VuGen große Fortschritte gemacht.
Wir haben gelernt, wie man ein Skript im Web-HTTP / HTML-Protokoll aufzeichnet, wie man Daten / Werte mit Korrelation und Parametrisierung pflegt, wie man sicherstellt, ob die Antwort mit Prüfpunkten korrekt ist, wie man Transaktionen einfügt, die die Rate und die Antwortzeit des Benutzers messen Aktionen und andere Dinge.
Mit diesen sollten wir in der Lage sein, Skripte für fast alle Webanwendungen erfolgreich zu erstellen.
=> Klicken Sie hier, um eine vollständige Reihe von LoadRunner-Tutorials anzuzeigen
LR Sprache
Es kann Situationen geben, in denen wir anspruchsvollere Aufgaben in einem VuGen-Skript ausführen müssen. In diesem Tutorial werden wir einige der Skriptherausforderungen sowie die verfügbaren Techniken diskutieren, um sie zu bewältigen.
Bevor wir diese diskutieren, wollen wir einige Dinge verstehen. VuGen (oder Load Runner) kann nur seine eigene Sprache verstehen (nennen wir dies LR-Sprache, wobei LR die Kurzform von Load Runner ist). Welches Skript auch immer generiert wird, kann als LR-Sprache bezeichnet werden. In der LR-Sprache gibt es nur einen Datentyp - String (und genauer gesagt 'LR-String').
Um Verbesserungen in einem VuGen-Skript vorzunehmen, verwenden wir im Allgemeinen die Sprache C.
Wir wissen, dass es in der C-Sprache viele Datentypen wie int, char, float, long usw. gibt. Wenn wir C-Werte direkt in einer Anfrage definieren und verwenden, wird VuGen nicht verstehen (da es nur 'LR-Strings' versteht) und wird werfen ein Fehler. Wir müssen also einen beliebigen C-Wert (eines beliebigen Datentyps) in einen LR-String konvertieren, bevor wir ihn in einer Anfrage verwenden können.
Nachdem wir dies verstanden haben, gehen wir zu einigen herausfordernden Szenarien in Echtzeit.
Szenario 1:Verwendung einer C-Zeichenfolge in einer VuGen-Anforderung
Nehmen wir an, dass wir in einem VuGen-Skript eine Anfrage mit einem Feld namens 'PlanName' haben (nehmen wir an, dass dieses Skript für eine Finanzplanungsanwendung bestimmt ist). Während der Aufnahme haben wir den Wert als 'NewPlan' eingegeben.
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 );
Angenommen, wir möchten eine benutzerdefinierte Zeichenfolge als Plannamen verwenden.
Wir müssen also eine Zeichenfolge deklarieren und definieren, wie unten gezeigt
char sPlanName() = ' MyFinancialPlan ';
Der 'sPlanName' ist eine C-Zeichenfolge und daher müssen wir ihn in eine LR-Zeichenfolge konvertieren (um ihn in der Anforderung zu verwenden).
Wir tun dies mit der Funktion 'lr_save_string' wie unten gezeigt:
lr_save_string(sPlanName,”LRPlanName”);
Diese Funktion weist dem LR-Parameter / der LR-Variablen einen Wert zu. Es werden zwei Attribute benötigt - Das erste Attribut ist die Quelle (C-Zeichenfolge) und das zweite Attribut ist das Ziel (LR-Parameter / Variable).
Diese Funktion speichert also den Wert der C-Variablen, die wir im LR-Parameter 'LRPlanName' definiert haben.
Jetzt können wir den 'LRPlanName' wie jeden anderen Parameter in der VuGen-Anfrage ersetzen.
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 );
Beachten Sie, dass beim Ausführen dieses Skripts alle Vuser und alle Iterationen denselben Wert wie der Planname haben. Um den Plannamen für jeden Lauf eindeutig zu machen, können wir so etwas tun.
char sPlanName() = ' MyFinancialPlan _{pVuserId}_{pIteration}'; lr_save_string( lr_eval_string(sPlanName),'LRPlanName' );
Hier sind 'pVuserId' und 'pIteration' die Parameter 'Vuser ID' und 'Iterationsnummer' (die wir in den Parametertypen in unseren vorherigen Tutorials besprochen haben). Diese werden im Plannamen verwendet, um sicherzustellen, dass für jeden Vuser und jede Iteration eindeutige Namen vorhanden sind.
Das ‘Lr_eval_string’ Die Funktion gibt die Eingabezeichenfolge zurück, nachdem alle eingebetteten Parameter ausgewertet wurden. In diesem Fall lautet die Ausgabe dieser Funktion 'MyFinancialPlan_1_1' für die erste Vuser-Iteration, 'MyFinancialPlan_1_2' für die erste Vuser-Iteration usw.
Und natürlich wissen wir was ‘Lr_save_string’ Funktion tut.
Jetzt können wir den Parameter 'LRPlanName' wie oben gezeigt ersetzen.
Szenario 2:So konvertieren Sie eine Load-Runner-Variable in eine C-Ganzzahl
Im letzten Tutorial haben wir ein Beispiel gesehen, um zu verstehen, wie wir eine Transaktion abhängig von einer Bedingung manuell bestehen oder nicht bestehen.
Beispiel:
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 ); }
Wir haben hier die if-Anweisung mit dem Attribut 'SaveCount' verwendet. Der Parameter 'WelcomeCount', der die Anzahl der Vorkommen des Textes speichert, kann nicht direkt im 'if' -Zustand verwendet werden, da es sich um eine Load-Runner-Zeichenfolge handelt. Dieser Parameter muss also zuerst in eine C-Zeichenfolge und dann in eine C-Ganzzahl konvertiert werden. ‘Lr_eval_string’ und 'Atoi' Hierfür werden Funktionen verwendet.
Das 'Atoi' Die C-Funktion konvertiert eine C-Zeichenfolge in eine C-Ganzzahl.
Nach dieser Konvertierung kann dies wie jede andere C-Ganzzahl verwendet werden.
Szenario 3:So senden Sie einen zufälligen Wert in einer Anfrage
Sehr oft kommen wir zu Anwendungsszenarien, in denen wir einen zufälligen Wert auswählen müssen (z. B. aus einer Dropdown-Liste). Wie gehen wir in VuGen-Skripten damit um? Wie stellen wir sicher, dass für jede Iteration ein zufälliger Wert ausgewählt wird? Lassen Sie uns dies im Detail sehen.
Nehmen wir das Beispiel unserer Anwendung 'Web Tours'. Wie wir bereits gesehen haben, haben wir eine Seite 'Flug suchen', auf der wir einen Flug auswählen müssen.
Angenommen, wir wählen den ersten in der Liste aus. Die entsprechende Anforderung im Skript lautet wie folgt (wobei der entsprechende Wert für den Flug ausgewählt ist).
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 );
Wir müssen zuerst die entsprechenden Werte für alle vier Flüge aus einer der vorherigen Antworten erfassen. Wir können dies mithilfe der Korrelationsfunktion (web_reg_save_param) mit dem Attribut 'ORD = ALL' vor der Anforderung tun, deren Antwort diesen Wert hat.
Die Ausgabe erfolgt folgendermaßen, wobei der korrelierte Parameter 'cFlight' ein Array von vier Werten enthält, die den vier Flügen entsprechen.
Der nächste Schritt wäre, zufällig einen dieser Werte auszuwählen und in der Anfrage einzureichen. Dies kann mit erfolgen ‘Lr_paramarr_random’ Funktion wie unten gezeigt.
strcpy (flightVal,lr_eval_string(lr_paramarr_random('cFlight')));
Die Eingabe zu ‘Lr_paramarr_random’ Funktion ist ein Parameterarray und die Ausgabe ist ein zufälliger Wert von diesem Array. Hier ist die Ausgabe dieser Funktion einer der vier Flugwerte. Und da dieser Zufallswert eine LR-Zeichenfolge ist, wird die Funktion 'lr_eval_string' verwendet (um dieselbe in eine C-Zeichenfolge umzuwandeln).
'Strcpy' Die C-Funktion kopiert diesen Wert schließlich in eine C-String-Variable 'flightVal'.
Jetzt müssen wir diese C-String-Variable wieder in einen LR-String konvertieren, um die Anfrage senden zu können.
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 );
Szenario 4:So teilen Sie eine Zeichenfolge in Token
Angenommen, es gibt ein Szenario, in dem wir eine Zeichenfolge in Teile / Token aufteilen müssen. Nehmen wir das Beispiel aus unserer Anwendung 'Web Tours', aus dem der Flugwert hervorgeht 020 ; 338; 04/03/2018 sagen, wir müssen nur '338' verwenden, dann müssen wir diese Zeichenfolge aufteilen und in einer Variablen speichern.
Um dies zu tun 'Strtok' Funktion wird verwendet.
'Strtok' Die C-Funktion gibt ein Token aus einer Zeichenfolge zurück, die durch angegebene Zeichen begrenzt ist. Nach dem ersten Aufruf müssen wir 'NULL' als Wert der Zeichenfolge übergeben, um das nächste Token zu erhalten. Das folgende Beispiel zeigt, wie diese Funktion verwendet wird, um den Flugwert basierend auf dem Semikolon-Trennzeichen (;) aufzuteilen.
Beispiel:
Nehmen wir an, dass der Flugwert aus der entsprechenden Antwort in den Parameter 'cFlight' erfasst wird.
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); }
Die Ausgabe davon wird im Wiedergabeprotokoll angezeigt.
Wir können das erforderliche Token in einen Parameter kopieren und verwenden.
Szenario 5:Lesen und Schreiben von Daten aus einer Textdatei
Manchmal kann es erforderlich sein, Daten aus einer externen Datei zu lesen oder Daten in eine externe Datei zu schreiben. Mal sehen, wie wir das in einem VuGen-Skript machen.
Lassen Sie uns zunächst sehen, wie Sie Daten aus einer Textdatei lesen.
Beispiel: Angenommen, wir müssen ein XML aus einer externen Datendatei lesen und es als Anforderung im Skript verwenden.
Dazu verwenden wir 'Fread' C-Funktion.
Diese Funktion hat vier Attribute:
Puffer - Der Puffer, in dem der Datenstrom gespeichert werden soll.
Größe - Die Größe des Puffers.
Anzahl - Die Anzahl der zu lesenden Bytes.
file_pointer - Der Dateizeiger
Beispielcode (mit Kommentaren) dafür
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
Beachten Sie, dass wir im oben gezeigten Code 500 Bytes aus der Textdatei lesen. Offensichtlich kennen wir die Dateigröße möglicherweise nicht immer. Also können wir verwenden 'Fseek' und 'Ftell' C-Funktionen (ich überlasse es Ihnen, diese zu untersuchen), um die Größe der Datei zu ermitteln und die zu verwenden 'Anzahl' Attribut der 'Fread' funktionieren entsprechend.
Nun wollen wir sehen, wie Daten in eine Textdatei geschrieben werden.
Beispiel: Angenommen, wir haben ein Skript, das Aufträge erstellt und 'orderid' generiert. Wenn wir alle von unserem Skript in einem Test erstellten Auftrags-IDs kennen möchten, können wir unser Auftrag veranlassen, diese Auftrags-IDs in eine externe Textdatei zu kopieren.
‘Fprintf’ - Die C-Funktion schreibt formatierte Ausgaben in eine Datei.
Diese Funktion nimmt folgende Attribute an:
file_pointer - Der Dateizeiger
format_string - Die formatierte Zeichenfolge, die in die Datei geschrieben werden soll.
args - Ein oder mehrere optionale Druckargumente.
Der Beispielcode ist unten dargestellt. Nehmen wir an, wir haben 'orderid' korreliert und im Parameter 'cOrderId' gespeichert.
Beispiel:
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 */
Ich hoffe, wir sind jetzt gut mit den Konzepten, Daten aus einer externen Datei zu lesen oder in eine externe Datei zu schreiben (natürlich kann es auch andere Möglichkeiten geben, dasselbe zu tun als oben beschrieben). Es wäre sehr nützlich, eine gründliche Studie über Dateivorgänge in C durchzuführen (Sie können sich auf gute C-Tutorials oder Bücher beziehen), da diese in vielen Echtzeitszenarien sehr erforderlich sind.
Szenario 6:Umgang mit Korrelationen bei sich ändernden Grenzen
Im Tutorial 'Korrelationen' haben wir grenzbasierte Korrelationsfunktionen verwendet, um die dynamischen Werte aus der Antwort zu erfassen. Aber was ist, wenn wir ein Szenario haben, in dem sich die Grenzen ändern? Es gibt verschiedene Möglichkeiten, mit solchen Situationen umzugehen. Lassen Sie uns diese im Detail sehen.
a) Verwenden der Flags 'IC', 'DIG' und 'ALNUM':
IC - Dieses Flag weist VuGen an, Groß- und Kleinschreibung an der linken / rechten Grenze zu ignorieren.
Beispiel: Wenn die linke Grenze manchmal in Großbuchstaben und manchmal in Kleinbuchstaben angegeben ist, verwenden wir dieses Flag.
web_reg_save_param ('corUserSession','LB/IC= name='userSession' value='','RB='/>', LAST);
SIE - Dieses Flag weist VuGen an, eine einzelne Zahl zu berücksichtigen, bei der das Platzhalterzeichen '#' an der linken / rechten Grenze verwendet wird.
wie man Arrays in Java zurückgibt
Beispiel: Wenn sich die linke Grenze (oder die rechte Grenze) so ändert (nur eine Zahl an einer bestimmten Position).
GJHi3rty
1GJHi8rty
GJHi7rty
Wir können das unten gezeigte 'DIG' -Flag verwenden, da dies die sich ändernde Nummer berücksichtigt.
LB / DIG = GJHi # rty
Erle - Dieses Flag weist VuGen an, jedes einzelne alphanumerische Zeichen zu berücksichtigen, bei dem das Platzhalterzeichen '^' an der linken / rechten Grenze verwendet wird.
Beispiel: Wenn sich die linke Grenze (oder die rechte Grenze) wie folgt ändert (nur ein alphanumerisches Zeichen an einer bestimmten Position).
GJHi3rty
GJHiKrty
GJHitrty
Wir können das unten gezeigte ALNUM-Flag verwenden, um das sich ändernde alphanumerische Zeichen zu berücksichtigen
LB / ALNUM = GJHi ^ rty
Wir können auch zwei Flags zusammen verwenden - wie 'ALNUMIC', das sowohl 'ALNUM' als auch 'IC' ist.
b) Verwenden der Attribute 'SaveLen' und 'SaveOffset':
Wir können diese beiden Attribute der verwenden ‘Web_reg_save_param’ Funktionieren Sie entsprechend, um nur den statischen Teil der linken / rechten Grenzen einzugeben.
c) Verwenden regulärer Ausdrücke:
Wir können benutzen ‘Web_reg_save_param_regexp’ Korrelationsfunktion zum Speichern des dynamischen Werts (in einem Parameter), der einem regulären Ausdruck entspricht.
Beispiel: Angenommen, der dynamische Wert, den wir erfassen möchten, ist '3959339' aus dem angegebenen Text.
PriceControl_ctl01 'Name = Buchse', 'Refid = 3959339' Guthaben
Wir können hier keine grenzenbasierte Korrelationsfunktion verwenden, da sich der Wert und die Länge des Felds wie oben unter 'Name' ändern können (und wir sie daher nicht an der linken oder rechten Grenze verwenden können).
Wir können die verwenden ‘Web_reg_save_param_regexp’ Korrelationsfunktion wie unten gezeigt, um dieses Problem zu beheben.
web_reg_save_param_regexp('ParamName=corName', 'RegExp= PriceControl_ctl01 'Name=((a-z)+)', 'Refid=((0-9)+)' balance', 'Group=1','Ordinal=All', LAST);
Die Gruppen mit regulären Ausdrücken werden in Klammern gesetzt und das Attribut 'Gruppe' entscheidet, welche Gruppe zum Speichern der entsprechenden Übereinstimmung mit dem angegebenen Parameter (im ersten Attribut) berücksichtigt werden soll.
Nachfolgend sind einige Übereinstimmungen mit regulären Ausdrücken aufgeführt:
d - entspricht einer einzelnen Ziffer
w - entspricht einem einzelnen Wort
(A-Z) + - entspricht einem beliebigen Wort in Großbuchstaben
(a-z) + - entspricht einem beliebigen Wort in Kleinbuchstaben
(0-9) + - entspricht einem beliebigen numerischen Wert
Szenario 7:So schreiben und verwenden Sie eine Funktion in einem VuGen-Skript
Wie in jeder anderen Programmiersprache können wir eine Funktion manuell schreiben / definieren (normalerweise als benutzerdefinierte Funktion bezeichnet) und an einer beliebigen Stelle im VuGen-Skript verwenden.
Nehmen wir an, wir müssen bei jeder Anforderung eines bestimmten Skripts einen eindeutigen Plannamen senden. Anstatt den erforderlichen Code (der einen eindeutigen Namen generiert) mehrmals zu schreiben, können wir eine Funktion definieren (die einen eindeutigen Namen generiert) und aufrufen, wann immer (und wo immer) dies im VuGen-Skript erforderlich ist.
Obwohl die Funktion in einem VuGen-Skript in jede Aktion geschrieben werden kann, wird sie im Allgemeinen in die geschrieben 'Globals.h' Datei (im Abschnitt 'Zusätzliche Dateien' des VuGen-Skripts) oder in einer neu erstellten Datei (im selben Abschnitt 'Zusätzliche Dateien'). Einmal geschrieben, kann die Funktion von jeder Aktion (en) aufgerufen werden.
Das Bild unten zeigt eine benutzerdefinierte Funktion 'MyFunction', die in die Datei 'globals.h' geschrieben wurde.
Wie oben erläutert, besteht die andere Möglichkeit darin, eine neue Datei zu erstellen und die Funktion darin zu schreiben.
Das einzige, woran Sie beim Erstellen einer neuen Datei denken müssen, ist, dass wir sie in die Datei 'globals.h' aufnehmen müssen (ohne die VuGen diese Datei nicht erkennt).
Fazit
In diesem Tutorial haben wir also gesehen, wie man mit einigen Echtzeitherausforderungen in VuGen-Skripten umgeht, und wir würden offensichtlich auf viele andere Szenarien stoßen, wenn wir an verschiedenen Anwendungen arbeiten.
Außerdem hätten Sie erkannt, dass C-String-Funktionen und C-Datei-Operationen für die Behandlung verschiedener Szenarien sehr wichtig (und nützlich) sind. Ich würde Ihnen jedoch empfehlen, einige Zeit damit zu verbringen, diese zu beherrschen.
In unserem nächsten Tutorial werden wir einige wichtige vordefinierte Funktionen sehen und verstehen, die in VuGen-Skripten verwendet werden (einige der Funktionen haben wir bereits gesehen).
=> Besuchen Sie hier für eine vollständige Reihe von LoadRunner-Tutorials
PREV Tutorial | NÄCHSTES Tutorial
Literatur-Empfehlungen
- Testen der Webdienstleistung mit LoadRunner VuGen Scripting
- Erweitertes Unix-Shell-Scripting: Arrays, Datei- und String-Testoperatoren, spezielle Variablen
- Lasttests mit HP LoadRunner-Tutorials
- VUGen-Aufnahmeoptionen in LoadRunner
- So richten Sie LoadRunner VuGen-Skriptdateien und Laufzeiteinstellungen ein
- Wichtige LoadRunner-Funktionen, die in VuGen-Skripten mit Beispielen verwendet werden
- Einführung in Micro Focus LoadRunner - Lasttests mit LoadRunner Tutorial # 1
- JMeter BeanShell Scripting Teil 2