Självstudie: Identifiera prestanda regressioner med GitHub åtgärder 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 GitHub Actions. Du konfigurerar ett CI/CD GitHub Actions-arbetsflöde för att köra ett belastningstest för ett exempelwebbprogram och använder sedan resultaten för att identifiera prestanda regressioner.

Viktigt

Det finns ett känt problem med GitHub för Azure Load Testing, vilket resulterar i att arbetsflödet för GitHub Actions misslyckas. Den senaste statusuppdateringen finns i Kända problem med Azure Load Testing.

Om du använder Azure Pipelines för dina CI/CD-arbetsflöden kan du gå motsvarande självstudiekurs om Azure Pipelines.

Du lär dig följande:

  • Konfigurera din lagringsplats med filer som krävs för belastningstestning.
  • Konfigurera ett GitHub för integrering med Azure Load-testning.
  • Kör belastningstestet och visa resultatet i arbetsflödet.
  • Definiera testkriterier för att belastningstestet ska klara eller misslyckas baserat på tröskelvärden.
  • Parameterisera ett belastningstest med hjälp GitHub hemligheter.

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.

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 GitHub Action-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 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 arbetsflödet GitHub Actions 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 GitHub åtkomstbehörigheter för Azure

I det här avsnittet konfigurerar du din lagringsplats GitHub ha behörighet att komma åt Azure Load Testing-resursen.

För att få åtkomst till Azure-resurser skapar Azure Active Directory tjänsthuvudnamn och använder rollbaserad åtkomstkontroll för att tilldela nödvändiga behörigheter.

  1. Kör följande Azure CLI-kommando för att skapa ett huvudnamn för tjänsten:

    az ad sp create-for-rbac --name "my-load-test-cicd" --role contributor \
                             --scopes /subscriptions/<subscription-id> \
                             --sdk-auth
    

    I föregående kommando ersätter du platshållartexten med <subscription-id> ditt Azure-prenumerations-ID för din Azure Load Testing-resurs.

    Resultatet av Azure CLI-kommandot är en JSON-sträng som du lägger till i dina GitHub hemligheter i ett senare steg.

    {
      "clientId": "<my-client-id>",
      "clientSecret": "<my-client-secret>",
      "subscriptionId": "<my-subscription-id>",
      "tenantId": "<my-tenant-id>",
      (...)
    }
    
  2. Gå till ditt fördredade exempelprogram på GitHub lagringsplats.

  3. Lägg till en ny hemlighet GitHub lagringsplatsen genom att välja Inställningar > Hemligheter Ny > lagringsplatshemlighet.

    Skärmbild som visar hur du lägger till en ny lagringsplatshemlighet till din GitHub lagringsplats.

  4. Ange AZURE_CREDENTIALS namn, klistra in JSON-svaret från Azure CLI för värdet och välj sedan Lägg till hemlighet.

    Skärmbild som visar information om den nya GitHub lagringsplatsens hemlighet.

  5. Om du vill ge tjänstens huvudnamn åtkomst till Tjänsten Azure Load Testing tilldelar du rollen Belastningstestdeltagare till tjänstens huvudnamn.

    Hämta först objekt-ID:t för tjänstens huvudnamn genom att köra det här Azure CLI-kommandot:

    az ad sp list --filter "displayname eq 'my-load-test-cicd'" -o table
    

    Tilldela sedan rollen Belastningstestdeltagare till tjänstens huvudnamn. Ersätt platshållartexten <sp-object-id> med ObjectId-värdet från föregående Azure CLI-kommando. 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 arbetsflödet GitHub Actions för att köra ett belastningstest

I det här avsnittet ska du konfigurera ett arbetsflöde GitHub Actions som utlöser belastningstestet.

Om du vill köra ett test med Azure Load Testing från ett CI/CD-arbetsflöde behöver du en YAML-konfigurationsfil för belastningstest. Lagringsplatsen för exempelprogrammet innehåller filen SampleApp.yaml som innehåller parametrarna för att köra testet.

  1. Öppna arbetsflödesfilen .github/workflows/workflow.yml GitHub Actions i lagringsplatsen för exempelprogrammet.

  2. Redigera filen och ersätt följande platshållartext.

    Platshållare Värde
    <your-azure-web-app> Namnet Azure App Service webbappen. Det här namnet ska matcha namnet som används för slutpunkts-URL:en i testskriptet SampleApp.jmx.
    <your-azure-load-testing-resource-name> Namnet på din Azure Load Testing-resurs.
    <your-azure-load-testing-resource-group-name> 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.

    env:
      AZURE_WEBAPP_NAME: "<your-azure-web-app>"
      LOAD_TEST_RESOURCE: "<your-azure-load-testing-resource-name>"
      LOAD_TEST_RESOURCE_GROUP: "<your-azure-load-testing-resource-group-name>"
    
  3. Genomför ändringarna direkt till main-grenen.

    Skärmbild som visar hur du sparar ändringarna i arbetsflödesfilen GitHub Actions.

    Genomföret utlöser arbetsflödet GitHub Åtgärder på lagringsplatsen. Du kan kontrollera att arbetsflödet körs genom att gå till fliken Åtgärder.

Visa belastningstestresultat

Arbetsflödet GitHub Actions utför följande steg för varje uppdatering till main-grenen:

  • Distribuera exempelappen Node.js till en Azure App Services-webbapp. Namnet på webbappen konfigureras i arbetsflödesfilen.
  • 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 arbetsflödesloggen GitHub Åtgärder.

  1. Välj fliken Åtgärder på din GitHub för att visa listan över arbetsflödeskörningar.

    Skärmbild som visar en lista över GitHub actions-arbetsflödeskörningar.

  2. Välj arbetsflödeskörningen i listan för att gå till körningsinformationen och loggningsinformationen.

    Skärmbild som visar information om arbetsflödesloggning.

    När belastningstestet är klart kan du visa testsammanfattningsinformationen och måtten på klientsidan i arbetsflödesloggarna. Loggen visar också stegen för att navigera till instrumentpanelen för Azure Load Testing för det här belastningstestet.

  3. På skärmen med information om arbetsflödeskörning väljer du artefakten loadTestResults för att ladda ned resultatfilerna för belastningstestet.

    Skärmbild som visar artefakter från arbetsflödeskörningen.

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 som sant misslyckas belastningstestet.

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

  1. Redigera filen SampleApp.yml på den GitHub lagringsplatsen.

  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 arbetsflödet GitHub Actions CI/CD.

  4. Välj fliken Åtgärder och välj sedan den senaste arbetsflödeskörningen för att visa arbetsflödesloggarna.

    Skärmbild som visar utdataloggen för det misslyckade arbetsflödet.

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

    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 har misslyckats.

  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 GitHub Actions-arbetsflödet.

    Skärmbild som visar utdataloggen för det lyckades arbetsflödet.

    Belastningstestet lyckas nu och arbetsflödet slutförs.

Skicka parametrar till dina belastningstester från arbetsflödet

Nu ska du parameterisera belastningstestet med hjälp av arbetsflödesvariabler. Dessa parametrar kan vara hemligheter som 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 så att den använder SampleApp_Secrets.jmx-filen.

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

    Skriptet SampleApp_Secrets.jmx Apache JMeter 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 App Service alla tre instanserna.

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

    Du distribuerar det säkra exempelprogrammet till en Azure App Service-webbapp med hjälp av arbetsflödet GitHub Actions i efterföljande steg. I föregående XML-kodfragment ersätter du platshållartexten {your-app-name} med det unika namnet App Service webbappen. Sedan använder du samma namn för att skapa webbappen.

    Viktigt

    Ta inte med https eller http i exempelprogrammets URL.

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

  9. Lägg till en ny hemlighet GitHub lagringsplatsen genom att välja Inställningar > Hemligheter Ny > lagringsplatshemlighet.

  10. Ange MY_SECRET för Namn och välj 1797669089 för värdet och välj sedan Lägg till hemlighet.

    Skärmbild som visar den lagringsplatshemlighet som används i JMeter-skriptet.

  11. Redigera filen .github/workflows/workflow.yml för att skicka hemligheten till belastningstestet.

    Redigera åtgärden Azure Load Testing genom att lägga till följande YAML-kodfragment.

    secrets: |
      [
          {
          "name": "appToken",
          "value": "${{ secrets.MY_SECRET }}"
          }
      ]
    
  12. Genomför ändringarna, vilket utlöser GitHub Actions-arbetsflödet.

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

Azure Load Testing-åtgärd

I det här avsnittet beskrivs azure-GitHub åtgärden. Du kan använda den här åtgärden genom att referera azure/load-testing@v1 till åtgärden i arbetsflödet. Åtgärden körs på Windows-, Linux- och Mac-körningar.

Du kan använda följande parametrar för att konfigurera GitHub åtgärden.

Parameter Beskrivning
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å den resursgrupp 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 namn 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 åtgärden i ett GitHub Actions-arbetsflöde.

- name: 'Azure Load Testing'
  uses: azure/load-testing@v1
  with:
    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": "${{ secrets.MY_SECRET1 }}",
          },
          {
          "name": "<Name of the secret>",
          "value": "${{ secrets.MY_SECRET2 }}",
          }
      ]
    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 arbetsflöde GitHub Actions 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.