Blog

Leistungstests mit Selenium und JMeter

Mark Bakker

Aktualisiert Oktober 22, 2025
3 Minuten

In diesem Blog zeige ich Ihnen, wie Sie Leistungstests mit Selenium durchführen können. Der Grund, warum ich Selenium für Leistungstests verwende, ist, dass einige Anwendungen proprietäre Protokolle zwischen der Anwendungsschicht im Browser und dem Server verwenden. Es ist also nicht so einfach, den Datenverkehr zwischen dem Server aufzuzeichnen und den geänderten Datenverkehr wiederzugeben. Ein Beispiel ist das Testen von GWT-Anwendungen. In einem früheren Blog habe ich geschrieben, warum das schwierig ist. Um ein Testskript in Selenium zu erstellen, zeichne ich als erstes einen Test mit der Selenium IDE auf Nachdem ich ein Skript aufgezeichnet habe, exportiere ich das Skript nach JUnit3 (Remote Control). Dadurch wird ein JUnit-Testskript generiert, das zum Testen der Anwendung ausgeführt werden kann. Als nächstes brauchen Sie eine Lösung, um viele JUnit-Testfälle gleichzeitig auszuführen. Hier sehen Sie eine visuelle Darstellung der gesamten Testkette.

Um dies zu archivieren, habe ich viele virtuelle Hosts erstellt, Selenium Server auf den Hosts installiert und den Namen des Servers zusammen mit dem Selenium Server Port in eine csv-Datei geschrieben. Danach habe ich den folgenden Code zu einer Basisklasse hinzugefügt, die die Basisklasse für alle JUnit-Testklassen sein wird:

geschütztstaticinthostCounter = 0;

geschütztstatischsynchronisiertvoid initializeSeleniumHosts(){ //Code zum Lesen einer csv-Datei mit Hosts } statisch{ initializeSeleniumHosts(); //andere Initialisierungen } geschütztstatischendgültigThreadLocalseleniumRunner = neuThreadLocal(){ protected Object initialValue(){ wenn(hostCounter<seleniumHosts.size()-1){ hostCounter++; }sonsthostCounter=0; String[] hostFields = seleniumHosts.get(hostCounter).split(":"); returnnew DefaultSelenium(hostFields[0], Integer.parseInt(hostFields[1]), "*firefox", "https://targetHost+baseUrl "+"/"); } }; publicvoid setUp(){ selenium = (DefaultSelenium)seleniumRunner.get(); selenium.start(); } publicvoid tearDown(){ selenium.stop();

}

Mit diesem Code wird jeder JUnit-Testfall auf dem nächsten Host in der csv-Datei ausgeführt. Bei den ersten manuellen Durchläufen können Sie sehen, wo ein Skript fehlschlägt. Aber wenn Sie > 10 vm's zum Testen verwenden, können Sie nicht sehen, wo das Skript Fehler verursacht. Um dieses Problem zu lösen, habe ich eine benutzerdefinierte Fail-Methode in der Basisklasse eingeführt. Die Fail-Methode protokolliert die Zeile, in der if fehlschlägt, in einer Protokolldatei. Dies hilft bei der Korrektur des Skripts, um sicherzustellen, dass es nicht bei Zeitüberschreitungen mit festen Timeouts fehlschlägt. Die fail-Methode:

publicstaticvoid fail(String message){ versuchen Sie{ werfen new Exception(); }catch(Exception e){ StackTraceElement[] stacktrace = e.getStackTrace(); versuchen Sie{ logFile.write("FAIL: ;" + Nachricht+";"+stacktrace[1]+"n"); logFile.flush(); }catch(Exception ee){ e.printStackTrace(); } } Assert.fail(Nachricht);

}

Hier sehen Sie ein Codeschnipsel, wie Sie es verwenden können:

für (int second = 0;; second++) { wenn (zweite >= 15) scheitern("Zeitüberschreitung"); Thread.sleep(4000); versuchen Sie { if (selenium.isElementPresent("//input[@id='someId']")) Pause; } catch (Exception e) {} } selenium.click("id=someId");

Diese Testmethode hat mir bei der Durchführung von Leistungstests für GWT und Anwendungen und Java-Applets sehr geholfen. Ich hoffe, diese Informationen helfen Ihnen bei der Durchführung von Leistungstests für Frameworks, die benutzerdefinierte Protokolle zwischen dem Client und dem Server verwenden. Viel Erfolg!

Verfasst von

Mark Bakker

Contact

Let’s discuss how we can support your journey.