Självstudie: Identifiera prestanda regressioner med Azure Pipelines och Förhandsversion av Azure Load Testing

I den här självstudien lär du dig att automatisera prestanda regressionstestning med förhandsversionen av Azure Load Testing och Azure Pipelines. Du konfigurerar ett CI/CD-arbetsflöde i Azure Pipelines för att köra ett belastningstest för ett exempelwebbprogram och sedan använda resultaten för att identifiera prestanda regressioner.

Om du använder åtgärder GitHub CI/CD-arbetsflöden kan du se motsvarande självstudiekurs GitHub Actions.

Du lär dig följande:

  • Konfigurera din lagringsplats med filer som krävs för belastningstestning.
  • Konfigurera Azure Pipelines för integrering med Azure Load Testing.
  • Kör belastningstestet och visa resultatet i pipelineloggarna.
  • Definiera villkor för pass/fail för belastningstestet.
  • Parameterisera belastningstestet med hjälp av pipelinevariabler.

Viktigt

Azure Load Testing finns för närvarande som förhandsversion. Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Anteckning

Azure Pipelines har en tidsgräns på 60 minuter för jobb som körs på Microsofts värdbaserade agenter för privata projekt. Om belastningstestet körs i mer än 60 minuter måste du betala för ytterligare kapacitet. Annars uppnår pipelinen en time out utan att vänta på testresultaten. Du kan visa belastningsteststatusen i Azure Portal.

Förutsättningar

Konfigurera din lagringsplats

För att komma igång behöver du först en GitHub-lagringsplats med exempelwebbappen. Sedan använder du den här lagringsplatsen för att konfigurera ett Azure Pipelines-arbetsflöde för att köra belastningstestet.

  1. Öppna en webbläsare och gå till exempelprogrammets källdatabas GitHub lagringsplats:https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git

    Exempelprogrammet är en Node.js som består av en Azure App Service webbkomponent och en Cosmos DB databas.

  2. Välj Förk för att förförföra exempelprogramdatabasen till ditt GitHub konto.

    Skärmbild som visar hur du förser exempelprogrammet med GitHub lagringsplatsen.

Konfigurera Apache JMeter-skriptet

Exempelprogrammets källdatabas innehåller ett Apache JMeter-skript med namnet SampleApp.jmx. Det här skriptet utför tre API-anrop på varje test-iteration:

  • add – Utför en datainfogningsåtgärd på Cosmos DB för antalet besökare i webbappen.
  • get – Utför en GET-åtgärd från Cosmos DB för att hämta antalet.
  • lasttimestamp – Uppdaterar tidsstämpeln sedan den senaste användaren gick till webbplatsen.

I det här avsnittet uppdaterar du Apache JMeter-skriptet med URL:en för exempelwebbappen.

  1. I exempelprogramdatabasen öppnar du SampleApp.jmx för redigering.

    Skärmbild som visar hur du redigerar Apache JMeter-testskriptet.

  2. Sök efter <stringProp name="HTTPSampler.domain">.

    Du ser tre instanser av <stringProp name="HTTPSampler.domain"> i filen.

  3. Ersätt värdet med URL:en för exempelprogrammets App Service alla tre instanserna.

    <stringProp name="HTTPSampler.domain">{your-app-name}.azurewebsites.net</stringProp>
    

    Du distribuerar exempelprogrammet till en Azure App Service webbapp med hjälp av Azure Pipelines i efterföljande steg. För tillfället ersätter du platshållartexten i föregående XML-kodfragment med ett unikt namn som du vill ge {your-app-name} App Service webbappen. Sedan använder du samma namn för att skapa webbappen.

    Viktigt

    Ta inte med https eller http i exempelprogrammets URL.

  4. Genomför ändringarna till main-grenen.

Konfigurera Azure Pipelines-åtkomstbehörigheter för Azure

I det här avsnittet konfigurerar du ditt Azure DevOps-projekt så att det har behörighet att komma åt Azure Load Testing-resursen.

För att få åtkomst till Azure-resurser skapar du en tjänstanslutning i Azure DevOps och använder rollbaserad åtkomstkontroll för att tilldela nödvändiga behörigheter.

  1. Logga in på din Azure DevOps-organisation ( https://dev.azure.com/<yourorganization> ).

  2. Välj Project inställningar > Tjänstanslutningar.

  3. Välj + Ny tjänstanslutning, välj Azure Resource Manager tjänstanslutning och välj sedan Nästa.

  4. Välj autentiseringsmetoden För tjänstens huvudnamn (automatisk) och välj sedan Nästa.

  5. Välj omfångsnivån Prenumeration och välj sedan den Azure-prenumeration som innehåller din Azure Load Testing-resurs.

    Skärmbild som visar hur du skapar en ny tjänstanslutning.

    Du använder namnet på tjänstanslutningen i ett senare steg för att konfigurera pipelinen.

  6. Välj Spara för att skapa anslutningen.

  7. Välj tjänstanslutningen i listan och välj sedan Hantera tjänstens huvudnamn.

    Skärmbild som visar hur du hanterar tjänstens huvudnamn.

    Du ser information om tjänstens huvudnamn i Azure Portal. Anteckna program-ID:t för tjänstens huvudnamn (klient).

    Skärmbild som visar hur du hämtar program-ID:t för tjänstanslutningen.

  8. Tilldela nu rollen Load Test Contributor (Belastningstestdeltagare) till tjänstens huvudnamn för att ge åtkomst till Azure Load Testing-tjänsten.

    Hämta först objekt-ID:t för tjänstens huvudnamn. Välj objectId-resultatet från följande Azure CLI-kommando:

    az ad sp show --id "<application-client-id>"
    

    Ersätt platshållartexten med <sp-object-id> objekt-ID:t för tjänstens huvudnamn. Ersätt också med ditt <subscription-name-or-id> Azure-prenumerations-ID.

    az role assignment create --assignee "<sp-object-id>" \
        --role "Load Test Contributor" \
        --subscription "<subscription-name-or-id>"
    

Konfigurera Azure Pipelines-arbetsflödet för att köra ett belastningstest

I det här avsnittet ska du konfigurera ett Azure Pipelines-arbetsflöde som utlöser belastningstestet.

Först installerar du tillägget Azure Load Testing från Azure DevOps Marketplace, skapar en ny pipeline och ansluter den sedan till exempelprogrammets förkända lagringsplats.

  1. Installera aktivitetstillägget Azure Load Testing från Azure DevOps Marketplace.

    Skärmbild som visar hur du bläddrar i Visual Studio Marketplace efter tillägg.

    Skärmbild som visar hur du installerar tillägget Azure Load Testing från Visual Studio Marketplace.

  2. I ditt Azure DevOps-projekt väljer du Pipelines och sedan Skapa pipeline.

    Skärmbild som visar hur du skapar en ny Azure Pipeline.

  3. På fliken Anslut väljer du GitHub.

  4. Välj Auktorisera AzurePipelines så att Azure Pipelines får åtkomst GitHub ditt konto för att utlösa arbetsflöden.

  5. På fliken Välj väljer du exempelprogrammets fördelade lagringsplats.

    Skärmbild som visar hur du väljer exempelprogrammets lagringsplats GitHub lagringsplats.

    Lagringsplatsen innehåller en definitionsfil för azure-pipeline.yml-pipeline. Nu ska du ändra den här definitionen för att ansluta till Azure Load Testing-tjänsten.

  6. På fliken Granska ersätter du följande platshållartext i YAML-koden.

    Platshållare Värde
    <Name of your webapp> Namnet Azure App Service webbappen. Det här namnet ska matcha namnet som används för slutpunkts-URL:en i testskriptet SampleApp.jmx.
    <Name of your webARM Service connection> Namnet på tjänstanslutningen som du skapade i föregående avsnitt.
    <Azure subscriptionId> ditt prenumerations-ID för Azure
    <Name of your load test resource> Namnet på din Azure Load Testing-resurs.
    <Name of your load test resource group> Resursgruppens namn som innehåller Azure Load Testing-resursen.

    Viktigt

    Namnet på Azure-webbappen ska matcha det namn som du använde för slutpunkts-URL:en i testskriptet SampleApp.jmx.

    Skärmbild som visar fliken Granska Azure Pipelines när du skapar en pipeline.

  7. Välj Spara och kör, ange ett commit-meddelande och välj sedan Spara och kör.

    Skärmbild som visar hur du sparar och kör en ny Azure-pipeline.

    Azure Pipelines kör nu CI/CD-arbetsflödet. Du kan övervaka status och loggar genom att välja pipelinejobbet.

    Skärmbild som visar hur du visar information om pipelinejobb.

Visa belastningstestresultat

För varje uppdatering av main-grenen utför Azure-pipelinen följande steg:

  • Distribuera exempelprogrammet Node.js till en Azure App Services-webbapp. Namnet på webbappen konfigureras i pipelinedefinitionen.
  • Utlöst Azure Load Testing för att skapa och köra belastningstestet baserat på Apache JMeter-skriptet och YAML-testkonfigurationsfilen på lagringsplatsen.

I det här avsnittet visar du belastningstestresultatet i pipelinelogginformationen.

  1. I ditt Azure DevOps-projekt väljer du Pipelines och sedan din pipelinedefinition i listan.

  2. Välj pipelinekörningen för att visa körningssammanfattningen.

    Skärmbild som visar en sammanfattning av pipelinekörningen.

  3. Välj Belastningstest i avsnittet Jobb för att visa pipelineloggarna.

    Skärmbild som visar körningsloggen för Azure Pipeline.

    När belastningstestet är klart kan du visa testsammanfattningsinformationen och måtten på klientsidan i pipelineloggarna. Loggen visar även URL:en för att navigera till instrumentpanelen för Azure Load Testing för det här belastningstestet.

  4. I pipelineloggvyn väljer du Belastningstest och väljer sedan 1 artefakt som skapas för att ladda ned resultatfilerna för belastningstestet.

    Skärmbild som visar hur du laddar ned belastningstestresultatet.

Definiera villkor för test pass/fail

I det här avsnittet lägger du till felkriterier för att fastställa resultatet av belastningstestet. Om minst ett av felvillkoren utvärderas till sant misslyckas belastningstestet.

Du kan ange dessa villkor i YAML-filen för testkonfigurationen.

  1. Redigera filen SampleApp.yml på din GitHub lagringsplats.

  2. Lägg till följande kodfragment i slutet av filen.

    failureCriteria: 
        - avg(response_time_ms) > 100
        - percentage(error) > 20
    

    Nu har du angett felkriterier för belastningstestet. Testet misslyckas om minst ett av dessa villkor är uppfyllt:

    • Den aggregerade genomsnittliga svarstiden är större än 100 ms.
    • Den sammanlagda procentandelen fel är större än 20 %.
  3. Genomför och push-skicka ändringarna till lagringsplatsens huvudgren.

    Ändringarna utlöser Azure Pipelines CI/CD-arbetsflödet.

  4. På sidan pipeline runs (pipelinekörningar) väljer du den senaste posten i listan.

    När belastningstestet är klart ser du att pipelinen misslyckades eftersom den genomsnittliga svarstiden var högre än vad du angav i felvillkoren.

    Skärmbild som visar pipelineloggar efter ett misslyckat testvillkor.

    Azure Load Testing-tjänsten utvärderar kriterierna under testkörningen. Om något av dessa villkor misslyckas returnerar Azure Load Testing-tjänsten en slutkod som inte är noll. Den här koden informerar CI/CD-arbetsflödet om att testet misslyckades.

  5. Redigera filen SampleApp.yml och ändra villkoren för testfel.

    failureCriteria: 
        - avg(response_time_ms) > 5000
        - percentage(error) > 20
    
  6. Genomför ändringarna för att utlösa Azure Pipelines CI/CD-arbetsflödet.

    Skärmbild som visar pipelineloggar när alla testkriterier har godkänts.

    Belastningstestet lyckas nu och pipelinen slutförs.

Skicka parametrar till dina belastningstester från pipelinen

Sedan parameteriserar du belastningstestet med hjälp av pipelinevariabler. Dessa variabler kan vara hemligheter, till exempel lösenord eller icke-hemligheter.

I den här självstudien konfigurerar du om exempelprogrammet så att det endast accepterar säkra begäranden. Om du vill skicka en säker begäran måste du skicka ett hemligt värde i HTTP-begäran.

  1. Redigera filen SampleApp.yaml på din GitHub lagringsplats.

    Uppdatera konfigurationsinställningen testPlan för att använda filen SampleApp_Secrets.jmx.

    version: v0.1
    testName: SampleApp
    testPlan: SampleApp_Secrets.jmx
    description: 'SampleApp Test with secrets'
    engineInstances: 1
    

    Apache JMeter-skriptet SampleApp_Secrets.jmx använder en användardefinierad variabel som hämtar det hemliga värdet med den anpassade funktionen ${__GetSecret(secretName)} . Apache JMeter skickar sedan det här hemliga värdet till slutpunkten för exempelprogrammet.

  2. Genomför ändringarna i YAML-filen.

  3. Redigera filen config.json på GitHub lagringsplats.

    Uppdatera inställningen enableSecretsFeature till true för att konfigurera om exempelprogrammet så att det endast accepterar säkra begäranden.

    {
        "enableSecretsFeature": true
    }
    
  4. Spara ändringarna i filen config.json.

  5. Redigera filen SampleApp_Secrets.jmx.

  6. Sök efter <stringProp name="HTTPSampler.domain">.

    Du ser tre instanser av <stringProp name="HTTPSampler.domain"> i filen.

  7. Ersätt värdet med URL:en för exempelprogrammets namn App Service alla tre instanserna.

    <stringProp name="HTTPSampler.domain">{your-app-name}.azurewebsites.net</stringProp>
    

    Du distribuerar exempelprogrammet till en webbapp Azure App Service med hjälp av arbetsflödet GitHub Actions. I föregående XML-kodfragment ersätter du platshållartexten {your-app-name} med det unika namnet App Service webbappen.

    Viktigt

    Inkludera inte https eller i http exempelprogrammets URL.

  8. Spara och genomför Apache JMeter-skriptet.

  9. Gå till sidan Pipelines, välj din pipelinedefinition och välj sedan Redigera.

    Skärmbild som visar hur du redigerar en pipelinedefinition.

  10. Välj Variabler och sedan Ny variabel.

  11. Ange informationen Name (mySecret) och Value (1797669089) och markera sedan rutan Keep this value secret (Behåll den här värdehemligheten) för att lagra variabeln på ett säkert sätt.

    Skärmbild som visar hur du skapar en ny pipelinevariabel.

  12. Välj OK och sedan Spara för att spara den nya variabeln.

  13. Redigera filen azure-pipeline.yml för att skicka hemligheten till belastningstestet.

    Redigera Azure Load Testing-uppgiften genom att lägga till följande YAML-kodfragment:

    secrets: |
      [
          {
          "name": "appToken",
          "value": "$(mySecret)"
          }
      ]
    
  14. Spara och kör pipelinen.

    Azure Load Testing-uppgiften skickar hemligheten från pipelinen till testmotorn på ett säkert sätt. Den hemliga parametern används bara när belastningstestet körs och sedan tas värdet bort från minnet.

Ta en titt på översikten över Azure Load Testing-uppgiften i nästa avsnitt.

Azure Load Testing Task

I det här avsnittet beskrivs Azure Load Testing-uppgiften för Azure Pipelines. Uppgiften är plattformsoberoende och körs på Windows-, Linux- eller Mac-agenter.

Du kan använda följande parametrar för att konfigurera Azure Load Testing-uppgiften.

Parameter Beskrivning
azureSubscription Krävs Namnet på Azure Resource Manager tjänsten.
loadTestConfigFile Krävs Sökväg till YAML-konfigurationsfilen för belastningstestet. Sökvägen är fullständigt kvalificerad eller relativ till standardarbetskatalogen.
resourceGroup Krävs Namnet på resursgruppen som innehåller resursen Azure Load Testing.
loadTestResource Krävs Namnet på en befintlig Azure Load Testing-resurs.
secrets Matris med JSON-objekt som består av namn och värde för varje hemlighet. Namnet ska matcha det hemliga namnet som används i Apache JMeter-testskriptet.
env Matris med JSON-objekt som består av namnet och värdet för varje miljövariabel. Namnet ska matcha variabelnamnet som används i Apache JMeter-testskriptet.

Följande YAML-kodfragment beskriver hur du använder uppgiften i ett CI/CD-arbetsflöde för Azure Pipelines.

- task: AzureLoadTest@1
  inputs:
    azureSubscription: '<Azure service connection>'
    loadTestConfigFile: '< YAML File path>'
    loadTestResource: '<name of the load test resource>'
    resourceGroup: '<name of the resource group of your load test resource>' 
    secrets: |
      [
          {
          "name": "<Name of the secret>",
          "value": "$(mySecret1)",
          },
          {
          "name": "<Name of the secret>",
          "value": "$(mySecret1)",
          }
      ]
    env: |
      [
          {
          "name": "<Name of the variable>",
          "value": "<Value of the variable>",
          },
          {
          "name": "<Name of the variable>",
          "value": "<Value of the variable>",
          }
      ]

Rensa resurser

Viktigt

Du kan använda de resurser som du har skapat som förutsättningar för andra självstudier och instruktionsartiklar om Azure Load Testing.

Om du inte planerar att använda någon av de resurser som du har skapat kan du ta bort dem så att du inte debiteras ytterligare.

  • I Azure-portalen:

    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.

  • Alternativt kan du använda Azure CLI.

    az group delete --name <yourresourcegroup>
    

    Kom ihåg att om du tar bort resursgruppen så tas alla resurser i den bort.

Nästa steg

Nu har du skapat ett CI/CD-arbetsflöde för Azure Pipelines som använder Azure Load Testing för att automatiskt köra belastningstester. Genom att använda pass/fail-kriterier kan du ange status för CI/CD-arbetsflödet. Med parametrar kan du göra körningen av belastningstestet konfigurerbar.