Beim Erstellen von Lasttests mit JMeter kommt man gelegentlich in Situationen, bei denen man Seitenaufrufe mit unzähligen Parametern simulieren muss. Diese manuell einzutragen ist Zeitaufwändig und ermüdend. Hier lohnt es sich, sich mit dem gespeicherten Testplan von JMeter auseinander zu setzen. Dieser liegt als .jmx-Datei vor und ist nach XML-Strukturen aufgebaut.
In vielen Fällen geschieht die Simulation der Seitenaufrufe anhand von Protokollierungen des Traffics durch Tools wie beispielsweise Fiddler. Diese liefern sämtliche übertragenen Parameter und die übertragungsart (standartmäßig Post oder Get). Der Fiddler-Output eines Seitenaufrufes sieht beispielsweise so aus:
GET http://www.google.de/search?hl=de&source=hp&q=Wie+f%C3%BCgt+man+Parameter+in+JMeter+geschickt+ein&aq=f&aqi=&aql=&oq=&fp=4d9f1e7e21e257ea HTTP/1.1
Host: www.google.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Referer: http://www.google.de/
Cookie: PREF=ID=ba066cfb5e57109c:U=6b212b101f47784d:FF=0:
TM=1295956157:LM=1295956337:S=AoUcCTa0d1GBlEYT; NID=43=AHfuZhjXNVnP8Anb3hitIHrT9r9ysl_FwvhgPL31BBhzx2cIzufWd6nJY2Hb3eh3tg62w-tH-GO96i3Xx4SUuWYbpbWSEWcTGHlUdwhM4RaIEnoKR9jj2vprkNs42sNt
Dieser Beispielrequest zeigt eine Suchanfrage an www.google.de. Die Parameter werden per GET übertragen und befinden sich in der URL nach dem Fragezeichen. Möchte man nun diesen Aufruf simulieren, so kopiert man sich die Zeichenkette der Parameter in ein Script und lässt dieses die Erstellung der JMeter-Parameter übernehmen.
Das Script muss dazu folgende Aufgaben übernehmen:
- Aufteilen der Parameter, die duch ein & getrennt sind
- Aufteiler der einzelnen Parameter in Variablen und Wert
- Jedes dieser Variable-Wert-Paare in einen JMeter-Parameter umwandeln
Das nachfolgende Beispiel zeigt den Aufbau eines JMeter-Parameters. Diese Struktur muss entstehen, um den Output des Scriptes direkt in die jmx-Datei übernehmen zu können.
false
Wert
=
true
Variable
Im folgenden Programm wird den Anforderungen entsprechend für jedes Variable-Wert-Paar eine Zeile des Templates generiert und die Platzhalter werden ersetzt.
package main;
public class Generator {
String template = "" +
"false" +
"<@< wert >@>" +
"=" +
"true" +
"<@< name>@>" +
"";
public static void main(String[] args) {
Generator g = new Generator();
g.process();
}
private void process() {
String parameterLine = "hl=de&source=hp&q=Wie+f%C3%BCgt+man+Parameter+in"
+"+JMeter+geschickt+ein&aq=f&aqi=&aql=&oq=&fp=4d9f1e7e21e257ea";
String[] parameterArray = parameterLine.split("&");
String[] parameter;
for(int i=1;i <= parameterArray.length;i++){
//parameter[0] = Var parameter[1] = Value
parameter = parameterArray[i].split("=");
String buffer = "";
buffer = template.replaceAll("<@< name >@>", parameter[0]);
if (parameter.length > 1) {
buffer = buffer.replaceAll("<@< wert >@>", parameter[1]);
} else {
buffer = buffer.replaceAll("<@< wert >@>", "");
}
System.out.println(buffer);
}
}
}