Dies ist eine Sammlung von Dienstprogrammen, die auf den Empfehlungen der Bewohner von Hacker News und GitHub basieren. Die Liste enthält: Locust, Vegeta, Slow_cooker, k6 und Siege. Sie werden von Ingenieuren von DICE, EA und Buoyant sowie den Entwicklern von Kubernetes und Load Impact verwendet. Lassen Sie uns über diese Tools sprechen.
Fotos - Victor Freitas - UnsplashTool für Stressteststellen. Alle Skripte sind in Python geschrieben. Eine spezielle, auf
Flask basierende Weboberfläche ermöglicht die Überwachung der Ergebnisse in Echtzeit. Die Autoren von Locust sind Schweizer Ingenieure, darunter Mitarbeiter von DICE- und EA-Unternehmen, die an der Entwicklung und Veröffentlichung von Computerspielen beteiligt sind.
Das Tool basiert auf einem interessanten Konzept: Locust ("Locust") emuliert das Verhalten eines Insektenschwarms (virtuelle Benutzer) und "greift" die Site während des Tests an. Anfragen werden unter Verwendung einer Netzwerkbibliothek zum Organisieren von Parallel-Computing-
Events gebildet . Hier ist ein Beispiel für einen einfachen Test, der auf der offiziellen Website des Projekts angegeben ist:
from locust import HttpLocust, TaskSet, task class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks min_wait = 5000 max_wait = 15000
Locust verwendet die Anforderungsbibliothek. Dieses Add-On für Standard-Python-Tools vereinfacht die Arbeit mit HTTP und SSL und macht den Code visueller. Die Anforderungsdokumentation kann übrigens als Spickzettel für Debugging-Tests auf Locust verwendet werden.
Dieses Stresstest-Tool gibt es seit über sieben Jahren. In dieser Zeit hat sich eine umfangreiche Community gebildet - auf GitHub
mehr als 10.000 Sterne . Locust wurde zur Bewertung der Leistung des Battlelog-Netzwerks für die Battlefield-Spieleserie verwendet. Armin Ronacher, Autor des Flask-Frameworks,
äußerte sich positiv über das Tool.
Unter den Nachteilen von Locust gibt
es eher geringe Leistung und periodische Fehler bei der Schätzung der Antwortzeit von Standorten. Das Tool weiß auch nicht, wie man Diagramme erstellt, aber das Problem wird gelöst, indem die Ergebnisse in Form von
CSV- Dateien hochgeladen und Diagramme im Tabelleneditor gerendert werden.
Wenn Sie Locust näher kennenlernen möchten, sollten Sie die
Dokumentation des Tools beachten. Sie können auch einen
Auftritt von Alexei Romanov aus Wargaming beim Python Meetup empfehlen. Er spricht darüber, wie man Skripte schreibt, die das Benutzerverhalten emulieren.
Befehlszeilenprogramm Go zum Testen von in Go geschriebenen HTTP-Diensten. Es kann als Bibliothek verbunden werden, um eigene Lasttest-Tools zu erstellen. Vegeta wurde von einem der Autoren der Open
Source Sourcegraph- Plattform entwickelt, einer Engine zum Überprüfen und Navigieren des von Lyft, Uber und Yelp verwendeten Quellcodes.
Vegeta bewertet die Fähigkeiten von Netzwerkressourcen und "bombardiert" ihre Anforderungen mit einer festgelegten Häufigkeit. Um beispielsweise localhost zu überprüfen, geben Sie einfach den folgenden Befehl ein:
echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report
Standardmäßig arbeitet Vegeta mit dem Standard-Befehlslesestream (stdin), sodass die zu testende Ressource über Echo übertragen wird. Der Parameter dauer gibt die Dauer des Tests an. Der Bericht wird in der Datei results.bin generiert. Vegeta generiert Berichte im Textformat, kann jedoch
Grafiken zeichnen . Sie können sie mit dem folgenden Befehl generieren:
vegeta plot -title=Results results.bin > results-plot.html
Rund um Vegeta hat sich eine große Community gebildet -
12.000 Sterne auf GitHub . Das Tool wurde sogar von Kubernetes-Entwicklern verwendet, um die Leistung ihrer Plattform zu bewerten. Anschließend erzeugte Vegeta ungefähr 10 Millionen Anfragen pro Sekunde an einen Cluster von Tausenden von Knoten.
Die Dokumentation, die alle Funktionen und Flags für die Vegeta-Tests beschreibt, befindet sich
im Repository auf GitHub . Dort
finden Sie auch vorkompilierte ausführbare Dateien.
Dies ist ein in Go geschriebenes Tool zum Testen der Serverlast. Es wurde von Ingenieuren von Buoyant entwickelt, die ein Servicenetz für Kubernetes - Linkerd erstellen. Es ist Teil der Cloud Native Computing Foundation und
gilt als Konkurrent von
Google Istio .
Fotos - Joshua Aragon - UnsplashIn der Regel überprüfen Dienstprogramme für Lasttests die Funktionen des Servers und senden ihm in kurzer Zeit so viele Anforderungen wie möglich. Die Autoren von slow_cooker sagen, dass Sie mit ihrem Tool die Arbeit von Eisen über einen langen Zeitraum unter einer vorhersehbaren Last bewerten können.
Schwimmende Experten nutzen ihre Entwicklung, um Linkerd und andere Dienste wie Nginx zu testen. Das Instrument ist ziemlich jung - er ist ungefähr drei - also bis er eine große Community hat. Aber die Situation könnte sich in Zukunft ändern, zum Beispiel wurde das Repository bereits bei Skysanner gespalten, einem internationalen Service für die Suche nach Flugtickets.
Sie finden den Quellcode
auf GitHub .
Ein Tool für Last- und Regressionstests von in der Cloud gehosteten Microservices, Containern und Sites. Es wurde in Go und von JavaScript-Entwicklern von Load Impact geschrieben - dies ist eine Anwendung zum Testen der "Persistenz" von Websites.
Die Arbeit mit k6 basiert auf dem Modell "Alles als Code", wenn die Testlogik und alle Einstellungen in JavaScript geschrieben sind. In Skripten können einzelne Schritte gruppiert werden, was für diejenigen nützlich sein kann, die es gewohnt sind, den Prinzipien von BDD zu folgen. Hier ist ein Beispiel für eine solche Gruppe:
import { group } from "k6"; export default function() { group("user flow: returning user", function() { group("visit homepage", function() {
Das Tool ermöglicht auch das
Aufzeichnen von Skripten und das
Erstellen von Diagrammen - die letztere Funktion ist in InfluxDB und Grafana implementiert. Und es ist in CI-Systeme wie Jenkins, Circle CI, Team City und GitLab integriert.
Benutzer sagen, dass k6
nicht ressourcenintensiv ist und eine komfortable API hat. Es gibt jedoch einige Nachteile, insbesondere unterstützt k6
kein Websocket und
weiß nicht, wie Tests auf verteilten Systemen durchgeführt werden sollen. Obwohl die k6-Entwickler im thematischen Thread von Hacker News
sagten, dass diese Funktionen in Zukunft erscheinen werden.
Wenn Sie sich selbst mit den Funktionen von k6 vertraut machen möchten, empfehlen die Bewohner von HN, mit der
technischen Dokumentation zu beginnen - diese ist detailliert und enthält Beispiele. Bei Fragen können Sie sich an
das offizielle Forum wenden.
Mit Siege können Sie Testwebserver laden. Das Dienstprogramm wurde von Ingenieur Jeff Fulmer (Jeff Fulmer) erstellt, damit Entwickler den Ressourcenverbrauch ihres Codes unter kampfnahen Bedingungen überprüfen können. Siege emuliert einen kontinuierlichen Zugriff von vielen Benutzern auf die Site, als würde der Server "belagert" - daher der Name des Tools.
Nach dem Test zeigt das Dienstprogramm Folgendes an: die Scan-Zeit, die Anzahl der Transaktionen pro Sekunde, den Durchsatz, die Anzahl der erfolgreichen und nicht erfolgreichen Anforderungen sowie deren Anzahl mit einem Antwortcode von 200. Hier ist
ein Beispiel für einen von Siege generierten Bericht.
Belagerung ist in der IT-Community weit verbreitet. Beispielsweise ist ein ganzer Abschnitt im Buch "
NGINX High Performance " mit seiner Hilfe dem Lasttest gewidmet. Es wird auch
von einigen Cloud-Anbietern verwendet.
Unter den Nachteilen von Siege können nicht standardmäßige Syntax und nicht offensichtliche Methoden zur Berechnung von Testparametern unterschieden werden. Beispielsweise werden Weiterleitungen
als erfolgreiche Transaktionen angesehen, sodass ihre Anzahl die Gesamtzahl der Anforderungen überschreiten kann. Wenn Sie Siege in der Praxis ausprobieren möchten, lesen Sie das
Online-Handbuch - es gibt einige „Kuriositäten“ des Systems.
Zusätzliche Lektüre im Blog von 1cloud.ru:
Was ist neu in Linux-Kernel 5.3 - Grafiktreiber, Virtualisierung und andere Updates
Warum Mainstream-Browser-Entwickler sich erneut geweigert haben, die Subdomain anzuzeigen
Warum hat Apple die Anforderungen für Anwendungsentwickler geändert?