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
- 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.
- Ett GitHub konto där du kan skapa en lagringsplats. Om du inte har något konto kan du skapa ett utan kostnad.
- En befintlig Azure Load Testing-resurs. Information om hur du skapar en resurs för belastningstest finns i Skapa och köra ett belastningstest.
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.
Ö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.
Välj Förk för att förförföra exempelprogramdatabasen till ditt GitHub konto.
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.
I exempelprogramdatabasen öppnar du SampleApp.jmx för redigering.
Sök efter
<stringProp name="HTTPSampler.domain">.Du ser tre instanser av
<stringProp name="HTTPSampler.domain">i filen.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
httpsellerhttpi exempelprogrammets URL.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.
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-authI 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>", (...) }Gå till ditt fördredade exempelprogram på GitHub lagringsplats.
Lägg till en ny hemlighet GitHub lagringsplatsen genom att välja Inställningar > Hemligheter Ny > lagringsplatshemlighet.
Ange AZURE_CREDENTIALS namn, klistra in JSON-svaret från Azure CLI för värdet och välj sedan Lägg till hemlighet.
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 tableTilldela 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.
Öppna arbetsflödesfilen .github/workflows/workflow.yml GitHub Actions i lagringsplatsen för exempelprogrammet.
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>"Genomför ändringarna direkt till main-grenen.
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.
Välj fliken Åtgärder på din GitHub för att visa listan över arbetsflödeskörningar.
Välj arbetsflödeskörningen i listan för att gå till körningsinformationen och loggningsinformationen.
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.
På skärmen med information om arbetsflödeskörning väljer du artefakten loadTestResults för att ladda ned resultatfilerna för belastningstestet.
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.
Redigera filen SampleApp.yml på den GitHub lagringsplatsen.
Lägg till följande kodfragment i slutet av filen.
failureCriteria: - avg(response_time_ms) > 100 - percentage(error) > 20Nu 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 %.
Genomför och push-skicka ändringarna till lagringsplatsens huvudgren.
Ändringarna utlöser arbetsflödet GitHub Actions CI/CD.
Välj fliken Åtgärder och välj sedan den senaste arbetsflödeskörningen för att visa arbetsflödesloggarna.
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.
Redigera filen SampleApp.yml och ändra villkoren för testfel.
failureCriteria: - avg(response_time_ms) > 5000 - percentage(error) > 20Genomför ändringarna för att utlösa GitHub Actions-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.
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: 1Skriptet 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.Genomför ändringarna i YAML-filen.
Redigera filen config.json på GitHub lagringsplats.
Uppdatera inställningen
enableSecretsFeaturetill true för att konfigurera om exempelprogrammet så att det endast accepterar säkra begäranden.{ "enableSecretsFeature": true }Spara ändringarna i filen config.json.
Redigera filen SampleApp_Secrets.jmx.
Sök efter
<stringProp name="HTTPSampler.domain">.Du ser tre instanser av
<stringProp name="HTTPSampler.domain">i filen.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
httpsellerhttpi exempelprogrammets URL.Spara och genomför Apache JMeter-skriptet.
Lägg till en ny hemlighet GitHub lagringsplatsen genom att välja Inställningar > Hemligheter Ny > lagringsplatshemlighet.
Ange MY_SECRET för Namn och välj 1797669089 för värdet och välj sedan Lägg till hemlighet.
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 }}" } ]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:
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.
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.
- Mer information om hur du parameteriserar belastningstester finns i Parameterisera ett belastningstest.
- Mer information om hur du definierar kriterier för testpass/-fel finns i Definiera testkriterier.