Självstudie: Kör ett belastningstest för att identifiera flaskhalsar i prestanda i en webbapp
I den här självstudien lär du dig att identifiera flaskhalsar i prestanda i en webbapp med hjälp av Azure Load Testing. Du skapar ett belastningstest för ett exempel Node.js program.
Exempelprogrammet består av ett Node.js webb-API som interagerar med en NoSQL-databas. Du distribuerar webb-API:et för att Azure App Service webbappar och använda Azure Cosmos DB som databas.
Läs mer om nyckelbegreppen för Azure Load Testing.
I den här självstudien får du lära dig att:
- Distribuera exempelappen.
- Skapa och kör ett belastningstest.
- Identifiera prestandaflaskhalsar i appen.
- Ta bort en flaskhals.
- Kör belastningstestet igen för att kontrollera prestandaförbättringar.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
- Azure CLI version 2.2.0 eller senare. Kör
az --version
för att hitta den version som är installerad på datorn. Om du behöver installera eller uppgradera Azure CLI läser du Så här installerar du Azure CLI. - Visual Studio Code. Om du inte har det laddar du ned och installerar det.
- Git. Om du inte har det laddar du ned och installerar det.
Distribuera exempelappen
Innan du kan läsa in test av exempelappen måste du distribuera den och köra den. Använd Azure CLI-kommandon, Git-kommandon och PowerShell-kommandon för att få det att hända.
Öppna Windows PowerShell, logga in på Azure och ange prenumerationen:
az login az account set --subscription <your-Azure-Subscription-ID>
Klona exempelprogrammets källdatabas:
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
Exempelprogrammet är en Node.js app som består av en Azure App Service webbkomponent och en Azure Cosmos DB-databas. Lagringsplatsen innehåller ett PowerShell-skript som distribuerar exempelappen till din Azure-prenumeration. Det har också ett Apache JMeter-skript som du kommer att använda i senare steg.
Gå till Node.js-appens katalog och distribuera exempelappen med hjälp av det här PowerShell-skriptet:
cd nodejs-appsvc-cosmosdb-bottleneck .\deploymentscript.ps1
Ange följande i prompten:
- ditt prenumerations-ID för Azure
- Ett unikt namn för din webbapp.
- En plats. Som standard är
eastus
platsen . Du kan hämta regionskoder genom att köra kommandot Get-AzLocation .
Viktigt
Använd bara gemener och siffror för webbappens namn. Använd inte blanksteg eller specialtecken.
När distributionen är klar går du till exempelprogrammet som körs genom att öppna
https://<yourappname>.azurewebsites.net
i ett webbläsarfönster.Om du vill se programmets komponenter loggar du in på Azure Portal och går till resursgruppen som du skapade.
Nu när du har distribuerat och kört programmet kan du köra ditt första belastningstest mot det.
Konfigurera och skapa belastningstestet
I det här avsnittet skapar du ett belastningstest med hjälp av ett Apache JMeter-exempeltestskript.
Exempelprogrammets källdatabas innehåller ett Apache JMeter-skript med namnet SampleApp.jmx. Det här skriptet gör tre API-anrop till webbappen på varje testiteration:
add
: Utför en datainfogningsåtgärd i Azure Cosmos DB för antalet besökare i webbappen.get
: Utför en GET-åtgärd från Azure Cosmos DB för att hämta antalet.lasttimestamp
: Uppdateringar tidsstämpeln sedan den senaste användaren gick till webbplatsen.
Anteckning
Apache JMeter-exempelskriptet kräver två plugin-program: Custom Thread Groups
och Throughput Shaping Timer
. Om du vill öppna skriptet på din lokala Apache JMeter-instans måste du installera båda plugin-program. Du kan använda Apache JMeter Plugins Manager för att göra detta.
Skapa Azure Load Testing-resursen
Resursen belastningstestning är en resurs på den högsta nivån för dina belastningstestningsaktiviteter. Den här resursen ger en central plats för att visa och hantera belastningstester, testresultat och relaterade artefakter.
Om du redan har en resurs för belastningstestning hoppar du över det här avsnittet och fortsätter till Skapa ett belastningstest.
Om du ännu inte har en resurs för belastningstestning skapar du en nu:
Logga in på Azure Portal med autentiseringsuppgifterna för din Azure-prenumeration.
Välj menyknappen i det övre vänstra hörnet i portalen och välj sedan + Skapa en resurs.
Använd sökfältet för att hitta Azure Load Testing.
Välj Azure Load Testing( Azure Load Testing).
I fönstret Azure Load Testing (Azure Load Testing) väljer du Skapa.
Ange följande information för att konfigurera din nya Azure Load Testing-resurs:
Fält Beskrivning Prenumeration Välj den Azure-prenumeration som du vill använda för den här Azure Load Testing-resursen. Resursgrupp Välj en befintlig resursgrupp. Eller välj Skapa ny och ange sedan ett unikt namn för den nya resursgruppen. Namn Ange ett unikt namn för att identifiera din Azure Load Testing-resurs.
Namnet får inte innehålla specialtecken, till exempel \/""[]:|<>+=;,?*@&, eller blanksteg. Namnet får inte börja med ett understreck (_), och det kan inte sluta med en punkt (.) eller ett bindestreck (-). Längden måste vara mellan 1 och 64 tecken.Plats Välj en geografisk plats som värd för din Azure Load Testing-resurs.
Den här platsen avgör också var testmotorerna finns och var JMeter-klientbegäranden kommer från.Anteckning
Du kan också konfigurera mer information på fliken Taggar . Taggar är namn/värde-par som gör att du kan kategorisera resurser och visa konsoliderad fakturering genom att tillämpa samma tagg på flera resurser och resursgrupper.
När du är klar med att konfigurera resursen väljer du Granska + skapa.
Granska alla konfigurationsinställningar och välj Skapa för att starta distributionen av Azure Load Testing-resursen.
När processen är klar visas ett meddelande om att distributionen lyckades.
Om du vill visa den nya resursen väljer du Gå till resurs.
Du kan också hantera åtkomst till din Azure Load Testing-resurs.
Azure Load Testing använder rollbaserad åtkomstkontroll (RBAC) för att hantera behörigheter för din resurs. Om det här meddelandet visas har ditt konto inte de behörigheter som krävs för att hantera tester.
Skapa ett belastningstest
Så här skapar du ett belastningstest i resursen Belastningstestning för exempelappen:
Gå till resursen Belastningstestning och välj Skapa nytt test i kommandofältet.
På fliken Grundläggande anger du testnamnet och testbeskrivningsinformationen . Du kan också markera kryssrutan Kör test när det har skapats för att automatiskt starta belastningstestet när du har skapat det.
På fliken Testplan väljer du testmetoden för JMeter-skript och väljer sedan testskriptet SampleApp.jmx från den klonade exempelprogramkatalogen. Välj sedan Ladda upp för att ladda upp filen till Azure och konfigurera belastningstestet.
Du kan också välja och ladda upp ytterligare Apache JMeter-konfigurationsfiler eller andra filer som refereras till i JMX-filen. Om testskriptet till exempel använder CSV-datauppsättningar kan du ladda upp motsvarande .csv filer.
Lägg till en ny miljövariabel på fliken Parametrar . Ange webapp som Namn och
<yourappname>.azurewebsites.net
Värde. Ersätt platshållartexten<yourappname>
med namnet på det nyligen distribuerade exempelprogrammet. Ta inte med prefixethttps://
.Apache JMeter-testskriptet använder miljövariabeln för att hämta webbprogrammets URL. Skriptet anropar sedan de tre API:erna i webbappen.
Konfigurera följande information på fliken Läs in . Du kan lämna standardvärdet för den här självstudien.
Inställning Värde Beskrivning Motorinstanser 1 Antalet parallella testmotorer som kör Apache JMeter-skriptet. På fliken Övervakning anger du de programkomponenter som du vill övervaka med resursmåtten. Välj Lägg till/ändra för att hantera listan över programkomponenter.
Välj Granska + skapa, granska alla inställningar och välj Skapa.
Anteckning
Du kan uppdatera testkonfigurationen när som helst, till exempel för att ladda upp en annan JMX-fil. Välj ditt test i listan över tester och välj sedan Redigera.
Kör belastningstestet i Azure Portal
I det här avsnittet använder du Azure Portal för att manuellt starta belastningstestet som du skapade tidigare. Om du har markerat kryssrutan Kör test när du har skapat det körs testet redan.
Välj Tester för att visa listan över tester och välj sedan det test som du skapade.
Tips
Du kan använda sökrutan och tidsintervallfiltret för att begränsa antalet tester.
På sidan testinformation väljer du Kör eller Kör test. Välj sedan Kör i bekräftelsefönstret Kör test för att starta belastningstestet.
Azure Load Testing börjar övervaka och visa programmets servermått på instrumentpanelen.
Du kan se måtten på den strömmande klientsidan medan testet körs. Som standard uppdateras resultatet automatiskt var femte sekund.
Du kan använda flera filter eller aggregera resultaten till olika percentiler för att anpassa diagrammen.
Tips
Du kan när som helst stoppa ett belastningstest från Azure Portal genom att välja Stoppa.
Vänta tills belastningstestet har slutförts helt innan du fortsätter till nästa avsnitt.
Identifiera prestandaflaskhalsar
I det här avsnittet ska du analysera resultatet av belastningstestet för att identifiera flaskhalsar i programmets prestanda. Undersök måtten på både klientsidan och serversidan för att fastställa rotorsaken till problemet.
Börja med att titta på måtten på klientsidan. Du ser att den 90:e percentilen för måttet Svarstid för
add
api-begäranden ochget
är högre än för API:etlasttimestamp
.Du kan se ett liknande mönster för Fel, där API:et
lasttimestamp
har färre fel än de andra API:erna.Resultatet av API:erna
add
ochget
är liknande, medan API:etlasttimestamp
beter sig annorlunda. Orsaken kan vara databasrelaterad, eftersom både API:ernaadd
ochget
omfattar databasåtkomst.Om du vill undersöka den här flaskhalsen mer detaljerat rullar du ned till instrumentpanelen för mått på serversidan .
Måtten på serversidan visar detaljerad information om dina Azure-programkomponenter: Azure App Service plan, Azure App Service webbapp och Azure Cosmos DB.
I måtten för Azure App Service plan kan du se att måtten CPU-procent och minnesprocent ligger inom ett acceptabelt intervall.
Titta nu på måtten på Serversidan i Azure Cosmos DB.
Observera att måttet Normaliserad RU-förbrukning visar att databasen snabbt kördes med 100 % resursanvändning. Den höga resursanvändningen kan ha orsakat databasbegränsningsfel. Det kan också ha ökade svarstider för webb-API:erna
add
ochget
.Du kan också se att måttet Etablerat dataflöde för Azure Cosmos DB-instansen har ett maximalt dataflöde på 400 RU:er. Om du ökar databasens etablerade dataflöde kan du lösa prestandaproblemet.
Öka databasens dataflöde
I det här avsnittet ska du allokera fler resurser till databasen för att lösa flaskhalsen med prestanda.
Öka databasens RU-skalningsinställning för Azure Cosmos DB:
Gå till den Azure Cosmos DB-resurs som du etablerade som en del av exempelprogramdistributionen.
Välj fliken Data Explorer.
Välj Skalningsinställningar &och uppdatera dataflödesvärdet till 1200.
Bekräfta ändringarna genom att välja Spara .
Verifiera prestandaförbättringarna
Nu när du har ökat databasens dataflöde kör du belastningstestet igen och kontrollerar att prestandaresultaten har förbättrats:
På testkörningsinstrumentpanelen väljer du Kör igen och sedan Kör om i fönstret Kör om test .
Du ser en ny testkörningspost med en statuskolumn som växlar genom tillstånden Etablering, Körning och Klar . Välj när som helst testkörningen för att övervaka hur belastningstestet fortskrider.
När belastningstestet har slutförts kontrollerar du svarstidsresultaten och felresultaten för måtten på klientsidan.
Kontrollera måtten på serversidan för Azure Cosmos DB och se till att prestandan har förbättrats.
Värdet för normaliserad RU-förbrukning i Azure Cosmos DB är nu långt under 100 %.
Nu när du har ändrat skalningsinställningarna för databasen ser du följande:
- Svarstiden för API:erna
add
ochget
har förbättrats. - Den normaliserade RU-förbrukningen ligger fortfarande långt under gränsen.
Därför har programmets övergripande prestanda förbättrats.
Rensa resurser
Viktigt
Du kan återanvända den Azure Load Testing-resurs som du skapade för andra självstudier om Azure Load Testing och instruktionsartiklar.
Om du inte planerar att använda någon av de resurser som du har skapat tar du bort dem så att du inte debiteras ytterligare avgifter. Om du har distribuerat exempelprogrammet i en annan resursgrupp kanske du vill upprepa följande steg.
Så här tar du bort resurser med hjälp av Azure Portal:
Välj menyknappen i det övre vänstra hörnet och välj sedan Resursgrupper.
Välj resursgruppen som du skapade från listan.
Välj Ta bort resursgrupp.
Ange resursgruppsnamnet. Välj sedan Ta bort.
Om du vill ta bort resurser med hjälp av Azure CLI anger du följande kommando:
az group delete --name <yourresourcegroup>
Kom ihåg att om du tar bort resursgruppen tas alla resurser i den bort.
Nästa steg
Gå vidare till nästa självstudie för att lära dig hur du konfigurerar ett arbetsflöde för automatisk regressionstestning med hjälp av Azure Pipelines eller GitHub Actions.