Tutorial: Identifizieren von Leistungsregressionen durch Automatisieren von Auslastungstests mit CI/CD
In diesem Tutorial wird beschrieben, wie Sie Leistungsregressionen schnell anhand von Azure Load Testing und CI/CD-Tools identifizieren. Identifizieren Sie schnell, wann Ihre Anwendung unter Auslastung Leistungsbeeinträchtigungen erfährt, indem Sie Auslastungstests in Azure Pipelines oder GitHub Actions ausführen.
In diesem Tutorial richten Sie eine CI/CD-Pipeline ein, die einen Auslastungstest für eine Beispielanwendung in Azure ausführt. Sie überprüfen das Anwendungsverhalten direkt über das CI/CD-Dashboard. Anschließend verwenden Sie die Fehlerkriterien des Auslastungstests, um eine Warnung zu erhalten, wenn die Anwendung Ihre Qualitätsanforderungen nicht erfüllt.
In diesem Tutorial verwenden Sie eine Beispielanwendung von Node.js und ein JMeter-Skript. Für das Tutorial sind keine Programmierkenntnisse oder Apache JMeter-Kenntnisse erforderlich.
Sie lernen Folgendes:
- Richten Sie das GitHub-Repository für Beispielanwendungen ein.
- Konfigurieren Sie die Dienstauthentifizierung für Ihren CI/CD-Workflow.
- Konfigurieren Sie den CI/CD-Workflow, um einen Auslastungstest auszuführen.
- Zeigen Sie die Ergebnisse des Auslastungstests im CI/CD-Dashboard an.
- Definieren sie die Fehlerkriterien des Auslastungstests, um Leistungsregressionen zu identifizieren.
Hinweis
Für Aufträge, die auf von Microsoft gehosteten Agents für private Projekte ausgeführt werden, gilt bei Azure Pipelines ein Timeout von 60 Minuten. Wenn Ihr Auslastungstest länger als 60 Minuten dauert, müssen Sie für zusätzliche Kapazität bezahlen. Andernfalls tritt für die Pipeline ein Timeout auf, ohne auf die Testergebnisse zu warten. Der Status des Auslastungstests kann im Azure-Portal angezeigt werden.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie kein Azure-Abonnement haben, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
- Wenn Sie Azure Pipelines verwenden, wird eine Azure DevOps-Organisation und ein Projekt verwendet. Falls Sie über keine Azure DevOps-Organisation verfügen, können Sie kostenlos eine erstellen. Informationen zu den ersten Schritten mit Azure Pipelines finden Sie bei Bedarf unter Erstellen Ihrer ersten Pipeline.
- Ein GitHub-Konto, in dem Sie ein Repository erstellen können. Wenn Sie noch keines besitzen, können Sie es kostenlos erstellen.
Einrichten des Repositorys für Beispielanwendungen
Um mit diesem Tutorial zu beginnen, müssen Sie zunächst eine Node.js-Beispielwebanwendung einrichten. Die Beispielanwendung enthält eine Azure Pipelines-Definition, um die Anwendung in Azure bereitzustellen und einen Auslastungstest auszulösen.
Öffnen Sie einen Browser, und navigieren Sie zum GitHub-Quellrepository der Beispielanwendung.
Die Beispielanwendung ist eine Node.js-App, die aus einer Azure App Service-Webkomponente und einer Azure Cosmos DB-Datenbank besteht.
Wählen Sie Fork (Forken) aus, um das Repository der Beispielanwendung in Ihr GitHub-Konto zu forken.
Das Repository der Beispielanwendung enthält ein Apache JMeter-Skript mit dem Namen SampleApp.jmx. Das Skript testet die drei APIs in der Beispielanwendung:
add
: Führt einen Einfügevorgang in Azure Cosmos DB zum Speichern der Anzahl von Web-App-Besuchern aus.get
: Führt einen Lesevorgang in Azure Cosmos DB zum Abrufen der Besucheranzahl aus.lasttimestamp
: Aktualisiert den In-Memory-Zeitstempel des letzten Benutzerbesuchs.
Konfigurieren der Dienstauthentifizierung
Bevor Sie die CI/CD-Pipeline so konfigurieren, dass ein Auslastungstest ausgeführt wird, gewähren Sie dem CI/CD-Workflow die Berechtigungen für den Zugriff auf Ihre Azure Load Testing-Ressource.
Um auf Ihre Azure Load Testing-Ressource aus dem Azure Pipelines-Workflow zuzugreifen, erstellen Sie zuerst eine Dienstverbindung in Ihrem Azure DevOps-Projekt. Die Dienstverbindung erstellt einen Azure Active Directory-Dienstprinzipal. Dieser Dienstprinzipal stellt Ihren Azure Pipelines-Workflow in Azure Active Directory dar.
Als Nächstes gewähren Sie diesem Dienstprinzipal Berechtigungen zum Erstellen und Ausführen eines Auslastungstests mit Ihrer Azure Load Testing-Ressource.
Erstellen einer Dienstverbindung in Azure Pipelines
Erstellen Sie eine Dienstverbindung in Azure Pipelines, damit Ihr CI/CD-Workflow Zugriff auf Ihr Azure-Abonnement hat. Im nächsten Schritt gewähren Sie dann Berechtigungen zum Erstellen und Ausführen von Auslastungstests.
Melden Sie sich bei Ihrer Azure DevOps-Organisation (
https://dev.azure.com/<your-organization>
) an und wählen Sie Ihr Projekt.Wählen Sie ProjekteinstellungenDienstverbindungen aus.
Wählen Sie + Neue Dienstverbindung, die Dienstverbindung Azure Resource Manager und anschließend Weiter aus.
Wählen Sie die Authentifizierungsmethode Dienstprinzipal (automatisch) und anschließend Weiter aus.
Geben Sie die Informationen zur Dienstverbindung ein und wählen Sie dann Speichern aus, um die Dienstverbindung zu erstellen.
Feld Wert Bereichsebene Abonnement. Abonnement Wählen Sie das Azure-Abonnement aus, das Ihre Auslastungstest-Ressource hostet. Ressourcengruppe Lassen Sie dieses Feld leer. Die Pipeline erstellt eine neue Ressourcengruppe für die Azure Load Testing-Ressource. Name der Dienstverbindung Geben Sie für die Dienstverbindung einen eindeutigen Namen ein. Sie verwenden diesen Namen später, um die Pipelinedefinition zu konfigurieren. Gewähren der Zugriffsberechtigung für alle Pipelines Aktiviert Wählen Sie in der Liste die Dienstverbindung und anschließend Dienstprinzipal verwalten aus.
Kopieren Sie im Azure-Portal den Wert der Anwendungs-ID (Client).
Starten von Azure Cloud Shell
Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel ausführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.
Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock einfach die Option Ausprobieren. Sie können Cloud Shell auch auf einem separaten Browsertab starten, indem Sie zu https://shell.azure.com navigieren.
Überprüfen Sie nach dem Öffnen von Cloud Shell, ob Bash für Ihre Umgebung ausgewählt ist. In den folgenden Sitzungen wird die Azure CLI in einer Bash-Umgebung verwendet. Wählen Sie Kopieren aus, um die Codeblöcke zu kopieren. Fügen Sie sie in Cloud Shell ein, und drücken Sie die EINGABETASTE, um sie auszuführen.
Anmelden bei Azure
Cloud Shell wird automatisch unter dem Konto authentifiziert, mit dem die Anmeldung anfänglich erfolgt ist. Verwenden Sie das folgende Skript, um sich mit einem anderen Abonnement anzumelden, und ersetzen Sie <Subscription ID>
durch Ihre Azure-Abonnement-ID. Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
subscription="<subscriptionId>" # add subscription here
az account set -s $subscription # ...or use 'az login'
Weitere Informationen finden Sie unter Festlegen des aktiven Abonnements oder unter Interaktives Anmelden.
Gewähren des Zugriffs auf Azure Load Testing
Um Zugriff auf Ihre Azure Load Testing-Ressource zu gewähren, weisen Sie dem Dienstprinzipal die Rolle „Auslastungstest-Mitwirkender“ zu. Diese Rolle gewährt dem Dienstprinzipal Zugriff zum Erstellen und Ausführen von Auslastungstests mit Ihrem Azure Load Testing-Dienst. Erfahren Sie mehr über das Verwalten von Benutzern und Rollen in Azure Load Testing.
Rufen Sie die ID des Dienstprinzipalobjekts mithilfe der Azure CLI ab. Ersetzen Sie den Platzhalterwert
<application-client-id>
durch den Wert, den Sie zuvor kopiert haben.object_id=$(az ad sp show --id "<application-client-id>" --query "id" -o tsv) echo $object_id
Zuweisen der Rolle
Load Test Contributor
zum Dienstprinzipal:subscription=$(az account show --query "id" -o tsv) echo $subscription az role assignment create --assignee $object_id \ --role "Load Test Contributor" \ --scope /subscriptions/$subscription \ --subscription $subscription
Konfigurieren des CI/CD-Workflows, um einen Auslastungstest auszuführen
Sie erstellen nun einen CI/CD-Workflow, um einen Auslastungstest für die Beispielanwendung zu erstellen und auszuführen. Das Beispielanwendungs-Repository enthält bereits eine CI/CD-Workflowdefinition, die die Anwendung zunächst in Azure bereitstellt und dann einen Auslastungstest auf der Grundlage des JMeter-Testskripts (SampleApp.jmx) erstellt. Sie aktualisieren die Beispiel-Workflowdefinitionsdatei, um die Azure-Abonnement- und Anwendungsdetails anzugeben.
Bei der ersten Ausführung des CI/CD-Workflows wird eine neue Azure Load Testing-Ressource in Ihrem Azure-Abonnement erstellt, indem die Azure Resource Manager-Vorlage (ARM) ARMTemplate/template.json verwendet wird. Weitere Informationen zu ARM-Vorlagen finden Sie hier.
Sie erstellen eine neue Azure-Pipeline, die mit Ihrem Fork des Beispielanwendungs-Repositorys verknüpft ist. Dieses Repository enthält die folgenden Elemente:
- Der Beispielanwendungs-Quellcode.
- Die Pipeline-Definitionsdatei azure-pipelines.yml.
- Das JMeter-Testskript SampleApp.jmx.
- Die Azure Load Testing-Konfigurationsdatei SampleApp.yaml.
Zum Erstellen und Ausführen des Auslastungstests verwendet die Azure Pipelines-Definition die Azure Load Testing-Aufgabenerweiterung aus dem Azure DevOps-Marketplace.
Öffnen Sie die Azure Load Testing-Aufgabenerweiterung im Azure DevOps-Marketplace und wählen Sie Kostenlos abrufen aus.
Wählen Sie Ihre Azure DevOps-Organisation aus und wählen Sie dann Installieren aus, um die Erweiterung zu installieren.
Wenn Sie nicht über Administratorberechtigungen für die ausgewählte Azure DevOps-Organisation verfügen, wählen Sie Anforderung aus, um einen Administrator anzufordern, die Erweiterung zu installieren.
Wählen Sie in Ihrem Azure DevOps-Projekt im linken Navigationsbereich Pipelines und dann Pipeline erstellen aus.
Wählen Sie auf der Registerkarte Connect die Option GitHub aus.
Wählen Sie Azure Pipelines autorisieren aus, damit Azure Pipelines zum Auslösen von Workflows auf Ihr GitHub-Konto zugreifen kann.
Wählen Sie auf der Registerkarte Auswählen das geforkte Repository der Beispielanwendung aus.
Azure Pipelines erkennt automatisch die Pipeline-Definitionsdatei azure-pipelines.yml.
Beachten Sie, dass die Pipelinedefinition die Phase
LoadTest
enthält, die zwei Aufgaben hat.Die Aufgabe
AzureResourceManagerTemplateDeployment
stellt eine neue Azure Load Testing-Ressource in Ihrem Azure-Abonnement bereit.Als Nächstes erstellt und startet die
AzureLoadTest
Azure Load Testing-Aufgabe einen Auslastungstest. Diese Aufgabe verwendet dieSampleApp.yaml
Konfigurationsdatei für den Auslastungstest, die die Konfigurationsparameter für den Auslastungstest enthält, z. B. die Anzahl der parallelen Testmodule.- task: AzureLoadTest@1 inputs: azureSubscription: $(serviceConnection) loadTestConfigFile: 'SampleApp.yaml' resourceGroup: $(loadTestResourceGroup) loadTestResource: $(loadTestResource) env: | [ { "name": "webapp", "value": "$(webAppName).azurewebsites.net" } ]
Wenn bereits ein Auslastungstest vorhanden ist, erstellt die Aufgabe
AzureLoadTest
keinen neuen Auslastungstest, fügt aber diesem Auslastungstest einen Testlauf hinzu. Um Regressionen im Laufe der Zeit zu identifizieren, können Sie dann mehrere Testläufe vergleichen.Ersetzen Sie auf der Registerkarte Überprüfen den folgenden Platzhaltertext am Anfang der Pipelinedefinition:
Diese Variablen werden verwendet, um die Bereitstellung der Beispielanwendung zu konfigurieren und den Auslastungstest zu erstellen.
Platzhalter Wert <Name of your webapp>
Der Name der Azure App Service-Web-App. <Name of your webARM Service connection>
Der Name der Dienstverbindung, die Sie im vorherigen Abschnitt erstellt haben. <Azure subscriptionId>
die Azure-Abonnement-ID <Name of your load test resource>
Der Name der Azure Load Testing-Ressource. <Name of your load test resource group>
Der Name der Ressourcengruppe, die die Azure Load Testing-Ressource enthält. Wählen Sie Speichern und ausführen aus, geben Sie Text für die Commitnachricht ein, und wählen Sie anschließend Speichern und ausführen aus.
Azure Pipelines führt jetzt den CI/CD-Workflow aus und stellt die Beispielanwendung bereit und erstellt den Auslastungstest.
Wählen Sie im linken Navigationsbereich Pipelines aus und wählen Sie dann „neue Pipelineausführung“ aus der Liste aus, um den Status zu überwachen.
Sie können das detaillierte Ausführungsprotokoll anzeigen, indem Sie den Pipelineauftrag auswählen.
Anzeigen von Auslastungstestergebnissen
Mit Azure Load Testing können Sie die Ergebnisse des Auslastungstestlaufs direkt in der CI/CD-Workflowausgabe anzeigen. Das CI/CD-Protokoll enthält die folgenden clientseitigen Metriken:
- Antwortzeitmetriken: Mittelwert, Minimum, Median, Maximum und 90-95-99 Perzentile.
- Anzahl der Anforderungen pro Sekunde.
- Gesamtanzahl der Anforderungen.
- Die Gesamtanzahl von Fehlern.
- Fehlerrate.
Darüber hinaus ist die Auslastungstest-Ergebnisdatei als Workflow-Ausführungsartefakt verfügbar, das Sie für weitere Berichte herunterladen können.
Wählen Sie in Ihrem Azure DevOps-Projekt die Option Pipelines und anschließend in der Liste Ihre Pipelinedefinition aus.
Wählen Sie die Pipelineausführung aus, um die Ausführungszusammenfassung anzuzeigen.
Wählen Sie im Abschnitt Aufträge die Option Auslastungstest aus, um das Pipelineprotokoll anzuzeigen.
Nach Abschluss des Auslastungstests können Sie sich die Testzusammenfassung und die clientseitigen Metriken im Pipelineprotokoll ansehen. Das Protokoll enthält auch die URL des Azure Load Testing-Dashboards für diesen Auslastungstest.
Wählen Sie in der Pipelineprotokollansicht die Option Auslastungstest und anschließend 1 Artefakt erstellt aus, um die Ergebnisdateien für den Auslastungstest herunterzuladen.
Definieren von Fehlerkriterien für den Test
Azure Load Testing ermöglicht Ihnen die Definition von Fehlerkriterien der Auslastungstests. Diese Kriterien bestimmen, wann ein Auslastungstest bestanden oder fehlgeschlagen werden sollte. Der Auslastungstest sollte beispielsweise fehlschlagen, wenn die durchschnittliche Antwortzeit größer als ein bestimmter Wert ist oder zu viele Fehler auftreten.
Wenn Sie einen Auslastungstest als Teil einer CI/CD-Pipeline ausführen, spiegelt der Status der Pipelineausführung den Status des Auslastungstests wider. Dieser Ansatz ermöglicht es Ihnen, Leistungsregressionen schnell zu identifizieren oder das Verhalten der Anwendung zu beeinträchtigen, wenn die Anwendung hohe Auslastung aufweist.
In diesem Abschnitt konfigurieren Sie Testfehlerkriterien basierend auf der durchschnittlichen Antwortzeit und der Fehlerrate.
Sie können Fehlerkriterien des Auslastungstests für Azure Load Testing in der YAML-Testdatei angeben. Erfahren Sie mehr über das Konfigurieren von Fehlerkriterien des Auslastungstests.
Bearbeiten Sie die Datei SampleApp.yml in Ihrem Fork des GitHub-Repositorys der Beispielanwendung.
Fügen Sie am Ende der Datei den folgenden Codeausschnitt hinzu:
failureCriteria: - avg(response_time_ms) > 100 - percentage(error) > 20
Sie haben jetzt Fehlerkriterien für Ihren Auslastungstest basierend auf der durchschnittlichen Antwortzeit und der Fehlerrate angegeben. Der Test ist nicht erfolgreich, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
- Die aggregierte durchschnittliche Antwortzeit ist größer als 100 ms.
- Der aggregierte Prozentsatz der Fehler ist größer als 20 Prozent.
Committen und pushen Sie die Änderungen an den Mainbranch des Repositorys.
Durch die Änderungen wird der CI/CD-Workflow ausgelöst.
Beachten Sie nach Abschluss des Tests, dass die CI/CD-Pipeline fehlgeschlagen ist.
Im CI/CD-Ausgabeprotokoll finden Sie, dass der Test fehlgeschlagen ist, da eine der Fehlerkriterien erfüllt wurde. Die durchschnittliche Antwortzeit des Auslastungstests war höher als der Wert, den Sie in den Fehlerkriterien angegeben haben.
Die Kriterien werden während des Testlaufs vom Azure Load Testing-Dienst ausgewertet. Wird eine dieser Bedingungen als Fehler eingestuft, wird vom Azure Load Testing-Dienst ein Exitcode ungleich null zurückgegeben. Dieser Code informiert den CI/CD-Workflow darüber, dass der Test nicht erfolgreich war.
Bearbeiten Sie die Datei SampleApp.yml und ändern Sie die Fehlerkriterien des Tests, sodass das Kriterium für die durchschnittliche Antwortzeit erhöht wird:
failureCriteria: - avg(response_time_ms) > 5000 - percentage(error) > 20
Committen Sie die Änderungen, um den CI/CD-Workflow wieder auszulösen.
Nach Abschluss des Tests wird festgestellt, dass der Auslastungstest und der CI/CD-Workflow erfolgreich ausgeführt wird.
Bereinigen von Ressourcen
Wichtig
Sie können die Azure Load Testing-Ressource, die Sie für andere Tutorials und Anleitungen zu Azure Load Testing erstellt haben, wiederverwenden.
Wenn Sie die erstellten Ressourcen nicht mehr benötigen, löschen Sie sie, damit Ihnen keine weiteren Kosten entstehen. Wenn Sie die Beispielanwendung in einer anderen Ressourcengruppe bereitgestellt haben, müssen die folgenden Schritte ggf. wiederholt werden.
So löschen Sie Ressourcen über das Azure-Portal:
Wählen Sie im Portal links oben die Menüschaltfläche und dann Ressourcengruppen aus.
Wählen Sie in der Liste die Ressourcengruppe aus, die Sie erstellt haben.
Wählen Sie die Option Ressourcengruppe löschen.
Geben Sie den Ressourcengruppennamen ein. Wählen Sie anschließend die Option Löschen.
Um Ressourcen mithilfe des Azure CLI löschen, geben Sie den folgenden Befehl ein:
az group delete --name <yourresourcegroup>
Denken Sie daran, dass beim Löschen der Ressourcengruppe alle darin enthaltenen Ressourcen gelöscht werden.
Nächste Schritte
Sie haben nun einen CI/CD-Workflow erstellt, der Azure Load Testing verwendet, um die Ausführung von Auslastungstests zu automatisieren. Mithilfe von Fehlerkriterien des Auslastungstests können Sie den Status des CI/CD-Workflows festlegen und Leistungs- und Anwendungsverhaltensverluste schnell identifizieren.
- Weitere Informationen zum Konfigurieren der serverseitigen Überwachung.
- Weitere Informationen zum Vergleichen von Ergebnissen über mehrere Testläufe hinweg.
- Weitere Informationen zum Parametrisieren eines Auslastungstests.
- Erfahren Sie mehr über das Definieren von Fehlerkriterien für Tests.