JMeter - Schweizer Prüfmesser (Teil 2)

Heute werde ich Ihnen erzählen, wie wir mit Hilfe von JMeter den Prozess des Zwischenspeicherns von Produktseiten eingerichtet, den Betrieb einer mobilen Anwendung ohne die Anwendung selbst getestet und 2.000 Benutzer im System ohne Zugriff auf die Datenbank erstellt haben.

Wer nicht weiß, was hier vor sich geht, liest den ersten Teil des Artikels. Darin erzählte ich, wie JMeter uns geholfen hat, das Problem mit dem Fall der Website bei einigen Benutzern zu „fangen“.

So können Sie schnell ein paar tausend Produktseiten zwischenspeichern


Unser anderer Kunde ist ein italienisches Unternehmen, das Geräte für Innen-, Außen- und dekorative Beleuchtung herstellt.

Screenshot der IPad-App
Die Ausstattung unserer Kunden beleuchtet die Meisterwerke der Weltmalerei, Architekturdenkmäler, Denkmäler, Gebäude von Geschäftszentren und Flughäfen

Wir haben die Seite für dieses Unternehmen auf Kentico entwickelt. Es präsentiert alle Materialien und Modelle von Beleuchtungsgeräten - 20.000 Exemplare. Und jeder hat eine eigene Seite.

Nach der Veröffentlichung der Website haben wir eine unangenehme Funktion von Kentico entdeckt: Es gibt kein Tool zum automatischen Laden von Mediendateien in den Cache. Nach dem Aktualisieren und Neustarten der Site (was regelmäßig geschieht) wird der Cache zurückgesetzt und die meisten Seiten werden 10 Sekunden lang geöffnet. Nicht jeder Benutzer ist bereit, so lange zu warten.

Wir haben zwei Optionen zum Laden von Mediendateien in den Cache gesehen. Erstens: Es ist eine lange Zeit, die Website manuell über einen Browser zu durchsuchen. Zweitens: ein Skript zu schreiben, das dies für uns erledigt - es passt!

Wir haben uns für JMeter entschieden: Wir haben ihm nur die vollständige Sitemap zugeführt, er ist darauf gelaufen und hat die Mediendateien an den Cache gesendet.

Es war eine einfache Lösung, aber nicht sehr optimal. Das Skript dauerte sechs (!!!) Stunden. Ein schnellerer Weg wurde benötigt.

Nachdem wir uns ein wenig mit dem Thema befasst hatten, entschieden wir uns für Regexps. JMeter kann vom Server integrierte Ressourcen für bestimmte Masken vom Server anfordern. Das haben wir ausgenutzt. Nachdem wir beseitigt haben, was sich nicht auf unserem Server befindet und nicht in den Cache geladen werden muss (Bilder, Schriftarten, Stile usw. von Drittanbietern), haben wir die Zeit, die das Skript benötigt, um die Seiten zu durchlaufen, auf zwei Stunden reduziert.

Dies sollte wie eine HTTP-Anforderung in JMeter aussehen, um nur einen bestimmten Asset-Typ zu laden

Das ist aber zu lang: Die Füllung beginnt um 9:00 Uhr in Tscheljabinsk und dauert eine Stunde, dann werden weitere zwei Stunden für das Skript aufgewendet, sodass wir um 12:00 Uhr fertig sind. In Italien ist es 08:00 Uhr, und einige Anwohner beginnen bereits um 6-7 Uhr morgens mit der Arbeit. Die Seite ist langsam, Beschwerden strömen ... Wir müssen weiter optimieren!

Die Entscheidung fiel, als wir feststellten, dass auf allen 20.000 Produktseiten fast dieselben Bilder verwendet wurden. Wir haben eine Analyse durchgeführt und festgestellt, dass es ausreicht, nur 30% der zufälligen Seiten (mit allen integrierten Ressourcen) vollständig herunterzuladen. Der Rest kann ohne Laden von Mediendateien ausgeführt werden. Daher fällt die überwiegende Mehrheit der Materialien - Bilder, Schriftarten, Skripte und Stile für Produktseiten - in den Cache. Wenn ein Benutzer einen von ihnen kontaktiert, erfordert das Herunterladen vom Server nur einen kleinen Teil des Inhalts und dauert nicht länger als 1-2 Sekunden.

Wir randomisieren das JMeter-Skript mithilfe von Parametern
Durch Anfordern einer zufälligen Seitenzahl aus der Tabelle "Benutzerdefinierte Variablen" erhalten wir jedes Mal eine zufällige Seite aus der Liste

Mit der beschriebenen Methode haben wir eine Site erhalten, die in 90% der Fälle schnell funktioniert. Ja, in einem von zehn Fällen dauerte es bis zu 30 Sekunden, bis die Seite geladen war, in den anderen neun flog alles. Und das in nur 15 bis 30 Minuten.

Jetzt werden solche Tricks nicht mehr benötigt - die Entwickler haben das Caching-System selbst optimiert. Aber zu dieser Zeit war diese Entscheidung eine echte Rettung, und JMeter erwies sich auch nach dem Loslassen und Gießen als sehr nützliches Werkzeug.

So erstellen Sie 2000 Benutzer der Anwendung, wenn Sie nur ihre E-Mail-Adresse haben und zwei Stunden arbeiten müssen


Der dritte Kunde, über den ich sprechen werde, ist ein Unternehmen, das medizinische Geräte entwickelt, herstellt und verkauft: von einfachen Skalpellen über Laserschneider bis hin zu komplexen Bohrern mit eingebauten Kameras. Ihre Manager gehen in Kliniken, kommunizieren mit Chirurgen und erzählen ihnen von ihren Produkten. Zu diesem Zweck haben sie eine spezielle Anwendung für das iPad: Die Daten des Arztes und eine Liste der Tools, die ihn interessieren, werden in das iPad eingegeben. Später wird ein Link zu einer persönlichen Seite mit einer Liste all dieser Tools, detaillierten Beschreibungen und Merkmalen an die E-Mail des Arztes gesendet. Diese Seiten für Chirurgen haben wir entwickelt. Die Bewerbung und der E-Mail-Newsletter wurden von einem anderen Unternehmen erstellt.

Eine der Aufgaben von JMeter in diesem Projekt besteht darin, das System zum Erstellen verschiedener Versionen solcher Seiten zu testen, obwohl wir nur ein Backend hatten. Wir haben ein Skript geschrieben, mit dem mithilfe eines Zufallszahlengenerators Seiten verschiedener Typen erstellt und zur Überprüfung an unsere Arbeits-E-Mails gesendet werden. Alles ist einfach. Und ich würde diesen Kunden im Artikel nicht einmal erwähnen, wenn nicht für einen Fall.

Einige Tage vor dem Start rief mich mein Manager an und bat mich, 2000 Benutzer für die Anwendung zu erstellen. Die Schwierigkeit bestand darin, dass wir weder auf den Live-Server noch auf die Datenbank zugreifen konnten. Wir mussten 2.000 Benutzer nur über das CMS erstellen (in diesem Fall über Umbraco). Gleichzeitig sollte jeder Benutzer nach der Registrierung einen Brief vom ungefähr folgenden Typ erhalten:

Brief nach der Registrierung
Nach Erhalt einer solchen E-Mail installiert der Benutzer die Anwendung und ändert das Standardkennwort in sein eigenes

Um einen Benutzer zu registrieren, sind fünf Felder erforderlich:

  • E-Mail
  • Name
  • Nachname;
  • Login;
  • Passwort

Ich hatte nur zwei Stunden Zeit, um die Aufgabe zu erledigen. Noch einmal: 2000 Benutzer, jeweils fünf Felder, zwei Stunden ... Daten vom Manager kamen in folgender Form:

Nicht das am besten lesbare Datenformat, nur eine Liste von E-Mails in Textform

Wenn ich ein Entwickler und kein QS-Spezialist wäre, würde ich ein Skript schreiben, zum Beispiel in Perl: Er würde diese Daten analysieren und schnell alles zerstreuen. Aber ich habe einen anderen Weg gewählt und vielleicht das ideale Werkzeug für eine schnelle Datenorganisation verwendet - MS Excel. Tabellenkalkulationen retten die Welt!

Mit Hilfe einfacher Manipulationen beim Ersetzen von Daten, Abschneiden von überschüssigen und anderen Tricks habe ich eine Datei mit ~ 10.000 Zeilen in der folgenden Form erstellt:

login1 | john.smith
login2 | Doktor
...
name1 | John
...

Ich habe mich nicht viel mit Passwörtern beschäftigt - ich habe gerade PasswordNumber1 geschrieben und diese Spalte in Excel auf alle 2000 Benutzer "erweitert". Dies spielt keine Rolle, da es nur für den ersten Eintrag verwendet wurde. Ja, und ich habe die allgemeine Liste der E-Mails nicht alphabetisch sortiert, was bedeutet, dass die Wahrscheinlichkeit einer zufälligen Kennwortschätzung minimiert wurde.

Ich fütterte JMeter mit dieser Datei (über die Zwischenablage), lehnte mich in meinem Stuhl zurück und beobachtete mit Vergnügen, wie Benutzer erstellt wurden. Der gesamte Prozess der Datenverarbeitung und Erstellung neuer Benutzer dauerte 1 Stunde 45 Minuten - sogar noch Zeit für Kaffee!

Fazit: JMeter erwies sich als praktisches Tool zum automatisierten Testen des Backends mobiler Anwendungen und plötzlich auch zur Automatisierung nicht standardisierter Aufgaben - wie dieser mit einer Reihe von Benutzern und einem Minimum an Informationen über diese.

Im Allgemeinen kann JMeter für eine Vielzahl von Aufgaben verwendet werden (und wurde von mir persönlich verwendet). Zum Beispiel für:

  • Optimierungsanalyse: Lasttests durchführen, Korrekturen für die Rollenoptimierung durchführen, Tests erneut durchführen, Ergebnisse vergleichen;
  • Abfragesicherheitstest: Schreiben Sie ein Skript mit einem Proxy, senden Sie die Anforderung ohne Front-End-Überprüfungen direkt an den Server, entfernen Sie die verschiedenen Schlüssel aus der Anforderung und überprüfen Sie, ob der Server angemessen reagiert.
  • Überprüfen der Antwort auf Header: Wir schreiben ein Skript, das Anforderungen mit unterschiedlichen Headern in einer Schleife an dieselbe Seite sendet. Wir überprüfen die Reaktion des Servers und prüfen, was entfernt werden soll.
  • Auflisten von Berechtigungskombinationen: Fügen Sie einen Zyklus mit Kennwörtern in einen Zyklus mit Anmeldungen ein, testen Sie das Berechtigungsformular.
  • Überprüfung auf Schutz vor Angriffen: Wir senden Anfragen zum Senden von Formularen in mehreren Streams und prüfen, ob Ihr Schutz funktioniert.
  • Automatisierung von API-Systemen: Alle Ergebnisse von API-Anforderungen können von einem Skript verarbeitet und im nächsten Schritt des Testzyklus verwendet werden. Auf diese Weise können Sie das Testen eines solchen Systems automatisieren.

Aus dem Vorstehenden können wir eine allgemeine Schlussfolgerung ziehen: JMeter ist ein universelles Werkzeug, ein echtes Schweizer Messer für einen Tester (und für einen Entwickler, um ehrlich zu sein).

Source: https://habr.com/ru/post/de463443/


All Articles