Über JMeter sprechen? Wenn Sie sich mit dem Thema befassen, haben Sie höchstwahrscheinlich bereits alles über dieses Tool für Stresstests gelesen. Aber ich muss dich überraschen. Drei Jahre lang bei QA wurde mir klar, dass JMeter sehr vielseitig ist und für eine Vielzahl von Zwecken verwendet werden kann. Zum Beispiel für:
- Suche nach einem schwer fassbaren Fehler mit dem Fall der Website für einige Benutzer;
- Schnelle Erwärmung des Caches auf Tausenden von Produktseiten;
- Testen des Backends einer mobilen Anwendung;
- Erstellen von 2000 Datensätzen mit Benutzerdaten in der Anwendungsdatenbank in kurzer Zeit.
Wenn Sie interessiert sind, willkommen bei Katze. Es stellte sich voluminös heraus, also werde ich den Artikel in zwei Teile teilen.
Haftungsausschluss: Aus offensichtlichen Gründen füge ich keine Screenshots von realen Projekten in den Artikel ein (oder extrahiere alle wichtigen Informationen daraus). Abbildungen werden nur zu Forschungs- und Bildungszwecken bereitgestellt.
Klassische JMeter-Anwendung
JMeter - Java-Applet mit GUI. Zum Testen startet es ohne grafische Oberfläche. Und zum Schreiben von Testskripten hat er ein Panel, in dem Sie alles tun können.
So sieht der Prozess der Erstellung des Skripts aus (hier passt sogar das Wort "Schreiben" nicht)Es wird ein gemeinsamer Testplan erstellt, in den sich die Thread-Gruppe mit den Hauptelementen des Tests einfügt: Prozesscontroller und Anforderungen (HTTP, FTP usw.).
Darüber hinaus gibt es zusätzliche Elemente zum Einstellen von Parametern. Mit den Standardeinstellungen für HTTP-Anforderungen können Sie beispielsweise den Hauptserver und die Header angeben und den Download zusätzlicher Elemente (Bilder, Stile, Schriftarten usw.) aktivieren / deaktivieren. Es ist einfach, es herauszufinden. Über diese Benutzeroberfläche können Sie sofort einen Test ausführen und die Ergebnisse anzeigen.
JMeter kann solche Testfälle aufzeichnen. Es wird als Proxy auf dem lokalen Computer ausgeführt. Wenn Sie einen Browser (oder eine Anwendung) konfigurieren und den Datenverkehr über diesen Proxy steuern, zeichnet JMeter alle Anforderungen und Antworten auf. Und aus diesem Satz können Sie ein Testskript erstellen, das die Aktionen des Benutzers wiederholt und es ausführt, wo und wann immer Sie möchten:
Das Hauptproblem ist der Heap des Java-Speichers. Es ruht an der Decke und kann mit 50 Fäden gleichzeitig getestet werden, selbst auf Spitzenmaschinen.
Wenn die Maschine nicht über genügend Strom für einen Volllasttest verfügt, wenden Sie sich an eine Drittanbieterorganisation. Sie stellten eine Infrastruktur bereit, die aus mehreren Servern besteht. Sie haben den gleichen JMeter. Gegen eine Gebühr führen diese Leute Ihr Skript bei jeder Belastung aus. Wir haben solche Dienstleistungen bei Octoperf und Blazemeter beantragt.
Das ist Fußball, Baby: Wie wir einen Fehler mit einem teilweisen Serverabsturz entdeckt haben
Wir beschäftigen uns seit 18 Jahren mit Webentwicklung (Prost - jetzt können Sie rauchen, heiraten und John Wick beobachten). Es gab viele Kunden in ihrem Leben, aber die größten sind kürzlich erschienen. Zum Beispiel haben wir auf
Sitecore eine Website für einen der englischen Premier League-Fußballvereine mit dem SPW-Paradigma erstellt (einseitige Website: Alle Seiten werden geöffnet, ohne dass die Browserseite selbst neu geladen wird). Unter der Haube befindet sich das Admin-Panel zum Verwalten einer Live-Match-Seite. Dies ist eine textuelle Online-Übertragung des Spiels: Die wichtigsten Ereignisse (Tore, Löschungen, Freistöße) werden automatisch aus dem Opta-System geladen, und Fotos, Kommentare und Reposts von Fans von Twitter und Instagram werden von Live-Leuten veröffentlicht - Content-Managern von Fußballclubs.
Nicht ohne Stolz stelle ich fest: Nach der Veröffentlichung veröffentlichten die britischen Medien Artikel unter den Überschriften "Endlich ist die Hegemonie der alten Standorte von Fußballclubs vorbei." Zu dieser Zeit hatten die meisten Clubs bereits Standorte. Aber sie sahen aus, als wären sie zu Beginn der 2000er Jahre entwickelt worden und haben sich seitdem nicht verändert - mit dem entsprechenden Design und UX.
Vor dem Start haben wir einen Volllasttest durchgeführt und sichergestellt, dass alles so funktioniert, wie es sollte. Die Serverstruktur sah folgendermaßen aus:
- Die Anforderung vom Client geht an den Lastausgleichsserver →
- Der Lastausgleichsserver überprüft den Status von acht CD- Servern →
- Der Lastausgleichsserver sendet eine Anfrage an den am wenigsten belasteten CD-Server →
- Der CD-Server antwortet dem Client.
Ein Jahr nach dem Start rief der Kunde während eines großen Zustroms von Benutzern auf die Site an und sagte, dass die Site nicht erreichbar sei:
- Unsere Seite funktioniert nicht! Funktioniert überhaupt nicht! Nur ein weißer Bildschirm und eine Inschrift aus dem Browser, dass die Website nicht verfügbar ist! - Der Kunde sagt.
Wir sind in Panik, als wir die Seite öffnen, und damit ist alles in Ordnung:
"Es funktioniert immer noch", antworten wir.
Der Client öffnet die Site über Telefon und Computer und ... alles ist auch in Ordnung!
- Wirklich, tut mir leid. Anscheinend haben Benutzer Probleme.
Solche Meldungen werden nicht von Grund auf neu angezeigt. Daher haben wir eine Studie durchgeführt: Wir haben ein Dienstprogramm zur Überwachung des Status von Servern mit Serverdichte gestartet und untersucht, was mit ihnen während eines Zustroms von Benutzern auf der Site passiert:
Es gibt eine Last, aber alle CD-Server sehen ungefähr gleich und gleichmäßig ausBald wiederholte sich die Geschichte - einige Benutzer meldeten eine völlig kaputte Site. Es wurde kein Fehler oder keine Seite gefunden - der Server hat einfach nicht auf die Anfrage geantwortet. Mit Hilfe von JMeter konnte die Situation erfasst werden.
Das Ziel war einfach: Laden Sie alle acht Server und sehen Sie, was passiert. Ein Stresstest wurde durchgeführt, als die Morgendämmerung in Tscheljabinsk stattfand, und in London war es eine tiefe Nacht. Wir haben mehrere Computer im Nicht-Schnittstellenmodus verwendet (damit können Sie viel mehr Threads gleichzeitig ausführen). Das Skript öffnete endlos die Homepage, und dies war unser Hauptfehler.

Wir haben dieselben Assets heruntergeladen, die bereits hundert Mal zwischengespeichert wurden. Daher kam die Last unbedeutend heraus. Dann kam die Idee: auf der Website - ein Wagen und ein kleiner Wagen mit Seiten mit Nachrichten für bestimmte Daten. Wenn Sie einige Variablen vorrücken und in der URL ersetzen, erhalten wir immer eine zufällige Seite (zum Beispiel - ... url / news / 2016/08/23 /? Page = 4).
Plötzlich stellten wir fest, dass die Serverdichte in den Diagrammen der Serverlast in den letzten Zeiträumen eine integrierte „Glättung“ aufweist. Wenn in fünf Minuten die Auslastung des Servers 100% erreicht hat, dann auf 0% gesunken ist und nach 20 bis 30 Sekunden auf 90% gestiegen ist, wird der Durchschnittswert für diesen Zeitraum angezeigt - etwa 80 bis 90%. Daher haben wir keinen echten Serverabsturz gesehen.
Nachdem wir die Protokolle während Stresstests eingehend untersucht hatten, stellten wir fest, dass einer der CD-Server bei 100% Auslastung neu gestartet wurde und niemandem davon erzählte (dies ist so introvertiert).

Der Load Balancer untersuchte nur die CPU-Auslastung aller Server. Er sah, dass einer von ihnen zu 20% und der Rest zu 90% geladen war, und schickte den Benutzer zum ersten. Und er war im Neustart und gab einen weißen Bildschirm aus. Darüber hinaus hat der Verteilungsserver den Benutzer einem Cookie ausgesetzt und es fest an den inaktiven Server gebunden. Daher war die Site auch nach dem Update nicht verfügbar. Die restlichen 7 von 8 Benutzern genossen gleichzeitig das Leben und sagten, dass alles funktioniert.
Fazit:
Wir haben festgestellt, dass JMeter für Stresstests verwendet werden kann und gleichzeitig den Status von Servern während des Testens mit anderen Tools analysiert. Wir haben es geschafft, das Problem mit dem Fall der Site bei einigen Benutzern zu „fangen“ und es zu lösen, indem wir die Lastverteilungslogik korrigiert und die Statussteuerung hinzugefügt haben.
Im nächsten Teil werde ich Ihnen erklären, wie wir mit Hilfe von JMeter den Caching-Prozess für Produktseiten eingerichtet, den Betrieb einer mobilen Anwendung ohne die Anwendung selbst getestet und 2000 Benutzer im System ohne Zugriff auf die Datenbank erstellt haben.