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

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.

  1. Öppna Windows PowerShell, logga in på Azure och ange prenumerationen:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. 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.

  3. 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
    

    Tips

    Du kan installera PowerShell på Linux/WSL eller macOS.

    När du har installerat det kan du köra föregående kommando som pwsh ./deploymentscript.ps1.

  4. Ange följande i prompten:

    • ditt prenumerations-ID för Azure
    • Ett unikt namn för din webbapp.
    • En plats. Som standard är eastusplatsen . 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.

  5. 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.

  6. Om du vill se programmets komponenter loggar du in på Azure Portal och går till resursgruppen som du skapade.

    Skärmbild som visar listan över Azure-resursgrupper.

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:

  1. Logga in på Azure Portal med autentiseringsuppgifterna för din Azure-prenumeration.

  2. Välj menyknappen i det övre vänstra hörnet i portalen och välj sedan + Skapa en resurs.

    Skärmbild som visar knappen för att skapa en resurs.

  3. Använd sökfältet för att hitta Azure Load Testing.

  4. Välj Azure Load Testing( Azure Load Testing).

  5. I fönstret Azure Load Testing (Azure Load Testing) väljer du Skapa.

    Skärmbild som visar fönstret Belastningstestning i Azure.

  6. 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.

  7. När du är klar med att konfigurera resursen väljer du Granska + skapa.

  8. 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.

  9. Om du vill visa den nya resursen väljer du Gå till resurs.

    Skärmbild som visar skärmen för distributionens slutförande.

  10. 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.

    Skärmbild som visar ett felmeddelande i Azure Portal att du inte har behörighet att använda Azure Load Testing-resursen.

Skapa ett belastningstest

Så här skapar du ett belastningstest i resursen Belastningstestning för exempelappen:

  1. Gå till resursen Belastningstestning och välj Skapa nytt test i kommandofältet.

    Skärmbild som visar knappen för att skapa ett nytt test.

  2. 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.

    Skärmbild som visar fliken Grundläggande för att skapa ett test.

  3. 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.

    Skärmbild som visar fliken Testplan och hur du laddar upp ett Apache JMeter-skript.

    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.

  4. Lägg till en ny miljövariabel på fliken Parametrar . Ange webapp som Namn och <yourappname>.azurewebsites.netVärde. Ersätt platshållartexten <yourappname> med namnet på det nyligen distribuerade exempelprogrammet. Ta inte med prefixet https:// .

    Apache JMeter-testskriptet använder miljövariabeln för att hämta webbprogrammets URL. Skriptet anropar sedan de tre API:erna i webbappen.

    Skärmbild som visar fliken parametrar för att lägga till miljövariabeln.

  5. 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.

    Skärmbild som visar fliken Läs in för att skapa ett test.

  6. 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.

    Skärmbild som visar fliken Övervakning för att skapa ett test.

    Skärmbild som visar hur du lägger till Azure-resurser som ska övervakas under belastningstestet.

    Skärmbild som visar fliken Övervakning med listan över Azure-resurser som ska övervakas.

  7. Välj Granska + skapa, granska alla inställningar och välj Skapa.

    Skärmbild som visar fliken för att granska och skapa ett test.

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.

  1. Välj Tester för att visa listan över tester och välj sedan det test som du skapade.

    Skärmbild som visar listan över tester.

    Tips

    Du kan använda sökrutan och tidsintervallfiltret för att begränsa antalet tester.

  2. 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.

    Skärmbild som visar val för att köra ett test.

    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.

    Skärmbild som visar instrumentpanelen med testresultat.

    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.

  1. 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 och get är högre än för API:et lasttimestamp .

    Skärmbild som visar mått på klientsidan.

    Du kan se ett liknande mönster för Fel, där API:et lasttimestamp har färre fel än de andra API:erna.

    Skärmbild som visar feldiagrammet.

    Resultatet av API:erna add och get är liknande, medan API:et lasttimestamp beter sig annorlunda. Orsaken kan vara databasrelaterad, eftersom både API:erna add och get omfattar databasåtkomst.

  2. 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.

    Skärmbild som visar måtten för Azure App Service plan.

    I måtten för Azure App Service plan kan du se att måtten CPU-procent och minnesprocent ligger inom ett acceptabelt intervall.

  3. Titta nu på måtten på Serversidan i Azure Cosmos DB.

    Skärmbild som visar Azure Cosmos DB-mått.

    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 och get .

    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:

  1. Gå till den Azure Cosmos DB-resurs som du etablerade som en del av exempelprogramdistributionen.

  2. Välj fliken Data Explorer.

    Skärmbild som visar fliken Data Explorer.

  3. Välj Skalningsinställningar &och uppdatera dataflödesvärdet till 1200.

    Skärmbild som visar de uppdaterade skalningsinställningarna för Azure Cosmos DB.

  4. 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:

  1. På testkörningsinstrumentpanelen väljer du Kör igen och sedan Kör om i fönstret Kör om test .

    Skärmbild som visar val för att köra belastningstestet.

    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.

  2. När belastningstestet har slutförts kontrollerar du svarstidsresultaten och felresultaten för måtten på klientsidan.

  3. Kontrollera måtten på serversidan för Azure Cosmos DB och se till att prestandan har förbättrats.

    Skärmbild som visar måtten på Klientsidan i Azure Cosmos DB efter uppdatering av skalningsinställningarna.

    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 och get 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:

  1. Välj menyknappen i det övre vänstra hörnet och välj sedan Resursgrupper.

  2. Välj resursgruppen som du skapade från listan.

  3. Välj Ta bort resursgrupp. Skärmbild av valen för att ta bort en resursgrupp i Azure Portal.

  4. 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.