Articles

Laden Sie Ihre App mit Siege testen

Juli 2019

Tag (s): rails_performance • Schienen • Programmierung
Lesezeit: 8 Minuten
  • Dumping eindeutige URLs in eine Textdatei
  • Besuchen Sie alle diese Seiten in einer Leistungstest
  • Zusätzliche Ressourcen

Das letzte Mal habe ich mich mit Apache Benchmark befasst, um Leistungstests auf einer Seite durchzuführen, für deren Zugriff eine Authentifizierung erforderlich ist.

Heute werden wir herausfinden, wie man siege verwendet, um viele eindeutige URLs auf unserer Seite zu besuchen und Benchmarks für diesen Prozess zu erhalten. Als nächstes werde ich die Leistungsprofilierung in Datadog herausfinden, und mit diesen drei Tools sollten wir bereit sein, einige sinnvolle Verbesserungen an unserer Anwendung vorzunehmen.

Diese Reihe von Beiträgen ist ein direktes Ergebnis von Nate Berkopecs The Complete Guide to Rails Performance, mit Hilfe seiner Screencasts, sowie Steve Grossi’s Load Testing Rails Apps mit Apache Bench, Siege und JMeter. Bewaffnet mit diesen Ressourcen und auf den Schultern von Riesen stehend, geht es los.

Beschreibung der Belagerung:

Siege ist ein HTTP-Lasttest- und Benchmarking-Dienstprogramm. Es wurde entwickelt, damit Webentwickler ihren Code unter Zwang messen können, um zu sehen, wie er der Belastung im Internet standhält. Siege unterstützt Standardauthentifizierung, Cookies, HTTP-, HTTPS- und FTP-Protokolle. Es ermöglicht dem Benutzer, einen Server mit einer konfigurierbaren Anzahl simulierter Clients zu erreichen. Diese Clients setzen den Server „unter Belagerung.“

Sie können mit brew install siege beginnen.

Ich benutze es, weil es eine Liste von URLs ausführen kann, die Sie ihm geben. Stellen Sie sich vor, Ihre App ist ein Geschäft und listet einige tausend Produkte auf. Jedes Produkt sollte eine eindeutige URL haben, etwa oder vielleicht . Das product-guid stellt sicher, dass Sie eindeutige URLs haben können, auch wenn es zwei Artikel mit demselben Produktnamen gibt.

Wenn Sie wissen, was sich in Ihrer Datenbank befindet, können Sie problemlos product-guid und product-name verketten, an das Ende von kleben und eine Liste mit hundert oder tausend oder zehntausend eindeutigen Produkt-URLs in Ihrer Anwendung erstellen. Wenn Sie diese in einer Textdatei gespeichert haben und jede einzelne dieser Seiten so schnell wie möglich besuchen müssten … könnte dies wie eine Art guter Stresstest aussehen, oder?

Eindeutige URLs in eine Textdatei kopieren #

Sie werden wahrscheinlich in einer rails console -Sitzung mit der Arbeit beginnen, um herauszufinden, wie Sie genau richtig auf das URL-Schema zugreifen können.

Ich habe die Konsole gestartet und Folgendes eingegeben:

Ich habe in unserer Entwicklungsdatenbank nach einem Konto mit vielen Daten gesucht. Konto mit der ID 4887 ist ein Konto, das der QA-Automatisierung zugeordnet ist und viele Daten enthält.

campaign.to_param ist, wie wir URLs aus unseren Kampagnen bauen – es verkettet nur die guid mit der title Zeichenfolge, wie vom Kunden zur Verfügung gestellt, und ruft .parameterize darauf. Für diesen Kampagnenstapel werden sie programmgesteuert von unserer automatisierten QS-Testsuite generiert.

Wenn Sie fertig sind, sehen Sie möglicherweise Folgendes in all_campaign_urls.txt:

Besuchen Sie alle diese Seiten in einem einzigen Test #

Sie können also siege --help und ein Flag zum Übergeben einer Datei sehen:

Ich weiß bereits, dass wir --file und --header benötigen, da wir authentifizierte Sitzungen fälschen müssen, indem wir einige Cookies einreichen.Der Prozess, für den ich das letzte Mal beschrieben habe

Das Flag --get sieht nützlich aus:

HOLEN Sie sich, ziehen Sie HTTP-Header herunter und zeigen Sie die Transaktion an. Ideal für das Debuggen von Anwendungen.

Melden Sie sich also als unser QA-Konto an. Da ich dies alles lokal ausführe, kann ich die zugehörige E-Mail-Adresse in unserer Datenbank finden. Ich kenne das Passwort natürlich nicht, aber ich kann ein lokales Zurücksetzen des Passworts erzwingen, die E-Mail in Mailcatcher abrufen und auf das gewünschte Passwort festlegen.

Lassen Sie uns diese Header einfügen.

Wir können mit unseren Cookies eine cURL-Testanfrage stellen. Wenn ich es tue

$ curl -v http://localhost:3000/account/campaigns/dd4dfb48aa-dec-05-drive-by-test

Ich erwarte, dass die Seite zurückkommt, keine Weiterleitung zu /users/sign_in

Wie eine fehlgeschlagene Authentifizierung aussehen soll:

Cookies:

_ts_session_id: c86fd1fe38d7a6c56ce1ef5990045057fd827a2c5655094bcce3748d6ee6d3e4: ImRhMDY1YjdjYjMwNGNjNWUxNzFkNDhjOGQ0YzA0OTIwIg%3D%3D--98c228cb35af1a269ee894c22540b81848e2ed09

Und wir sind im Geschäft:

Beachten Sie diese Statuscodes von 200? Ich kann tail -f log/development.log und alle Aktivitäten sehen, was darauf hinweist, dass die übermittelten Cookies einem authentifizierten Benutzer zugeordnet sind.

Das erste, was mir auffällt, ist, dass dies extrem lange Seitenladezeiten zu sein scheinen.

Ich muss ungefähr 162 verschiedene URLs laden. Wenn Sie siege mit der Standardkonfiguration ausführen, werden 20 Benutzer gleichzeitig ausgeführt. Dies schien ein bisschen viel für das zu sein, was mein localhost verarbeiten konnte, also habe ich versucht, die Anzahl der gleichzeitigen Benutzer zuerst auf zwei Benutzer und dann auf einen zu reduzieren.

Um die Anzahl der gleichzeitigen Benutzer festzulegen, fügen Sie einfach das Flag --concurrent=NUM hinzu. Ich war immer noch mit Ausgaben überflutet, also habe ich gleichzeitige Benutzer auf 1 gesetzt und alle außer 20 Seiten aus der Liste der zu ladenden Seiten entfernt. Ich habe ihm auch ein time Flag von 60 Sekunden gegeben: -t 60s

Wenn alles gesagt und getan ist, werden Sie sehen, dass siege eine Reihe von zeitgesteuerten GET -Anfragen stellt:

Schließlich wird sich alles beruhigen und Sie erhalten eine Zusammenfassung des Belastungstests:

Ja, OK, das ist cool, Josh, aber wie zum Teufel soll ich damit etwas Nützliches anfangen?

Tolle Frage! Es ist Zeit zu sehen, wo unsere App die meiste Zeit verbringt, in der realen Welt. Wir könnten mehr Benchmarking vor Ort durchführen, aber offensichtlich sind reale Daten, die von realen Personen gesammelt wurden, die mit Ihrer realen App in der Produktion interagieren, die nützlichste Datenquelle.

Deshalb werde ich bald schreiben Ich habe darüber geschrieben, wie man nützliche Daten von einer Rails-App in DataDog bekommt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.