Einführung
Lasttests sind eine Technik, die sich auf die Bewertung der Leistung einer Anwendung unter normalen oder erwarteten Lastbedingungen konzentriert. Das Ziel ist es, festzustellen, wie sich die Anwendung verhält, wenn sie dem erwarteten Nutzungs- und Verkehrsaufkommen ausgesetzt ist. Lasttests werden häufig eingesetzt, um zu überprüfen, ob ein System die erwartete Anzahl von Benutzern und Transaktionen bewältigen kann, und um Leistungsengpässe oder Probleme zu erkennen, die sich auf die Benutzerfreundlichkeit auswirken könnten.
Microsoft Azure bietet einen neuen Dienst (in der Vorschau) an, der Azure Load Testing heißt. Einer der Hauptvorteile dieses Dienstes ist, dass Sie die Leistung Ihrer Anwendung in großem Maßstab testen können, ohne in teure Hardware und Infrastruktur investieren zu müssen. Außerdem ist er hochgradig konfigurierbar und kann zum Testen von Anwendungen verwendet werden, die auf einer Vielzahl von Plattformen gehostet werden, darunter Azure, lokale Server und Cloud-Anbieter von Drittanbietern.
Was brauchen wir?
Zusätzlich zu einem Azure-Abonnement und einem GitHub-Konto benötigen wir ein Apache JMeter-Skript, das in der Regel aus einer Reihe von Testelementen besteht, einschließlich Thread-Gruppen, Samplern, Listenern und Assertions. Die Thread-Gruppen definieren die Anzahl und den Typ der virtuellen Benutzer, die simuliert werden sollen, während die Sampler die spezifischen Aktionen oder Anfragen definieren, die von den virtuellen Benutzern ausgeführt werden sollen. Die Listener erfassen die vom Test generierten Leistungsdaten, und die Assertions definieren die erwarteten Ergebnisse des Tests und überprüfen, ob die tatsächlichen Ergebnisse mit den Erwartungen übereinstimmen.
Hier finden Sie das Skript, das ich im Rahmen dieser Demo erstellt habe.
Erste Schritte
Im folgenden Beispiel werden wir Azure Load Testing in unserem Workflow von GitHub Actions verwenden, um zu erkennen, wann unsere Web-App ein Leistungsproblem erreicht hat. Wir definieren ein Lasttest-Szenario mit einer bestimmten Anzahl und Art von virtuellen Benutzern, die simuliert werden sollen, sowie die Testdauer und die Art der zu simulierenden Arbeitslast, die in diesem Fall eine HTTP-Anfrage ist. Darüber hinaus können Sie entweder Visual Studio oder das Azure-Portal verwenden, um Ihr Lasttest-Szenario zu erstellen und zu konfigurieren.
Sobald das Lasttest-Szenario definiert ist, können wir die Ergebnisse und Überwachungsdaten überprüfen. Dazu gehören Metriken wie Antwortzeit, CPU-Auslastung und Netzwerkverkehr sowie benutzerdefinierte Leistungszähler, die wir definieren können. Mit diesen Daten können wir Engpässe identifizieren und die Leistung der Anwendung optimieren.
Das Szenario
Ich habe eine einfache Web-App entwickelt, die mit ASP.NET Core unter Verwendung von .NET 7 erstellt wurde. Sie verbindet sich mit einer Azure Cosmos DB und fügt einen Datensatz für jeden Besuch auf der Seite hinzu und ruft die Daten aller Besuche ab.
Die Umwelt
Diese Webanwendung läuft auf einem App Service Basic-Tarif und verfügt über Applications Insights zur Überwachung der Leistung der Anwendung. Die Cosmos-DB ist auf die kostenlose Stufe eingestellt (1000 RU/s und 25 GB). Ich möchte herausfinden, ob die Anwendung, die in dieser Umgebung läuft, bis zu 100 gleichzeitige Benutzer unterstützen kann.
Das Repository
Sie können sich das GitHub-Repository hier ansehen. Dort können Sie das Repository forken, die ARM-Vorlage für die Bereitstellung der benötigten Azure-Dienste verwenden und die Lasttests in Ihrer Umgebung durchführen.
Hinweis: In Microsoft Azure können Sie nur eine Cosmos DB Free Tier-Ressource pro Abonnement erstellen. Sie erhalten möglicherweise eine Fehlermeldung, wenn Sie bereits eine Cosmos DB Free Tier-Ressource in Ihrem Abonnement haben.
Dieses Repository enthält eine GitHub-Aktion, mit der Sie die Anwendung erstellen und bereitstellen und den Lasttest in Azure Load Testing ausführen können.
Die GitHub Aktion
Der Arbeitsablauf besteht aus drei Schritten (Erstellen, Bereitstellen und Lasttest) und wird bei jedem Push ausgeführt. Der Lasttestauftrag verwendet die folgenden Dateien im Stammordner:
Die Azure-Anmeldung ist für die Kommunikation mit dem Azure Load Testing Service erforderlich, um das JMeter-Skript und die Konfiguration für den Test zu senden. In dieser Konfiguration können wir die Anzahl der Engines, mit denen der Test durchgeführt werden soll, und die Fehlerkriterien festlegen. In diesem Fall haben wir eine durchschnittliche Antwortzeit von weniger als 5 Sekunden und einen Fehlerprozentsatz von weniger als 20%.
Die Ergebnisse
Wie Sie im obigen Bild sehen können, ist der Lasttest fehlgeschlagen, weil die durchschnittliche Antwortzeit über dem Schwellenwert (5 Sekunden) lag. Weitere Details zum Testlauf erhalten Sie im Azure-Portal. Sie können die Ergebnisse hier herunterladen.
Im Azure App Service können wir die Metriken mit den Antwortzeiten (mehr als 5 Sekunden) und der Anzahl der Anfragen mit den Data in und Data out sehen. 
Darüber hinaus habe ich Application Insights hinzugefügt, um die Webanwendung zu überwachen. Im Azure-Portal können wir die Leistungsprobleme und Ausfälle sehen.
Im obigen Bild können Sie sehen, woher die Anfragen kamen. In diesem Fall führe ich Azure Load Testing in der Region East US (Virginia) durch.
Schlussfolgerungen
Der Lasttest sollte nicht in einer Produktionsumgebung durchgeführt werden, sondern in einer QA- oder Vorproduktionsumgebung. Auch wenn Sie auf Deployment-Slots laufen, denken Sie daran, dass die App immer noch auf demselben App Service Plan läuft und dies Ihre Produktionsumgebung beeinträchtigen oder eine Denial-of-Service-Attacke verursachen könnte.
Wenn Sie mehr über Azure Load Testing erfahren möchten, empfehle ich Ihnen, sich die Dokumentation des Dienstes anzusehen .

Unsere Ideen
Weitere Blogs
Contact






