Damian Brunold

Apache HttpClient

2011-05-23 15:45 Imagic, Java, Programmieren, Web

Um den ims Publisher sinnvoll testen zu können (Lasttests, Ausdauertests) habe ich in der Imagic ein Projekt gestartet das dass Verhalten von Benutzern simulieren kann. Um die eigentlichen Requests durchzuführen verwende ich Apache HttpClient.

Das hat sich als erstaunlich einfach und problemlos erwiesen. Insbesondere werden die Cookies automatisch korrekt behandelt, sodass es trivial ist, eine ganze Usersession zu simulieren.

Im wesentlichen muss man nur

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);

aufrufen. Ich habe entsprechende Builtins in Scriptlang eingebaut und kann nun eine ganze Seite inklusive Bilder mit ein bisschen Scriptcode laden:

var http = http_client();
var imagerx = regexp(r'img\s+src="([^"]+)"');

def get_page_with_images(u) {
    var start = now();
    var response = http.get(u);
    log(response.timestamp() + " " + u + " " + response.status());
    var images = imagerx.matcher(response.contents()).findall();
    for match in images {
        var image = match[1][0];
        var response = http.get(url + image);
        log(response.timestamp() + " " + url + image + " " + response.status()); 
    }
}

Das rufe ich dann in einem Loop einige Male auf

for r in range(1, 10) {
    get_page_with_images(url + "?showall");
    for i in range(1, 500) {
        get_page_with_images(url + "?from=" + (20 * i));
    }
}

und schon ist ein simpler Lasttest am Laufen. Das nächste wäre dann realistischere User zu simulieren, diese parallel laufen zu lassen und vor allem Metriken zu Requestduration und Memoryload etc. zu sammeln und verfügbar zu machen.