Zelfstudie: Prestatie regressies identificeren met Azure Pipelines en Azure Load Testing Preview

In deze zelfstudie leert u hoe u het testen van prestatie-regressie kunt automatiseren met Azure Load Testing Preview en Azure Pipelines. U configureert een CI/CD-werkstroom van Azure Pipelines om een belastingstest uit te voeren voor een voorbeeldwebtoepassing en gebruikt vervolgens de resultaten om prestatie-regressies te identificeren.

Zie de bijbehorende zelfstudie GitHub acties als u acties gebruikt voor uw CI/GitHub CD-werkstromen.

U leert het volgende:

  • Stel uw opslagplaats in met bestanden die vereist zijn voor belastingstests.
  • Azure Pipelines instellen voor integratie met Azure Load Testing.
  • Voer de belastingstest uit en bekijk de resultaten in de pijplijnlogboeken.
  • Definieer de criteria voor het slagen/mislukken van de belastingstest.
  • Parameteriseer de belastingtest met behulp van pijplijnvariabelen.

Belangrijk

Azure Load Testing is momenteel beschikbaar als preview-versie. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

Notitie

Azure Pipelines heeft een time-out van 60 minuten voor taken die worden uitgevoerd op door Microsoft gehoste agents voor privéprojecten. Als uw belastingstest langer dan 60 minuten wordt uitgevoerd, moet u betalen voor extra capaciteit. Zo niet, dan t mogelijk een time-out voor de pijplijn zonder te wachten op de testresultaten. U kunt de status van de belastingstest in de Azure Portal.

Vereisten

  • Een Azure-account met een actief abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
  • Een Azure DevOps-organisatie en -project. Als u geen Azure DevOps-organisatie hebt, kunt u er gratis een maken. Zie Uw eerste pijplijn maken als u hulp nodig hebt om aan de slag te gaan met Azure Pipelines.
  • Een GitHub account, waar u een opslagplaats kunt maken. Als u nog geen account hebt, kunt u gratis een account maken.
  • Een bestaande Azure Load Testing-resource. Zie Een belastingstest maken en uitvoeren om een resource voor het testen van belasting te maken.

Uw opslagplaats instellen

Om aan de slag te gaan, hebt u eerst een GitHub met de voorbeeldwebtoepassing nodig. Vervolgens gebruikt u deze opslagplaats om een Azure Pipelines-werkstroom te configureren om de belastingstest uit te voeren.

  1. Open een browser en navigeer naar de bronopslagplaats van GitHub voorbeeldtoepassing:https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git

    De voorbeeldtoepassing is een Node.js app die bestaat uit Azure App Service webonderdeel en een Cosmos DB database.

  2. Selecteer Fork om de opslagplaats van de voorbeeldtoepassing te vervorken naar GitHub account.

    Schermopname die laat zien hoe u een fork maakt van de GitHub-repo.

Het Apache JMeter-script configureren

De bron-repo van de voorbeeldtoepassing bevat een Apache JMeter-script met de naam SampleApp.jmx. Met dit script worden drie API-aanroepen uitgevoerd voor elke test iteratie:

  • add - Voert een bewerking voor het invoegen van gegevens Cosmos DB voor het aantal bezoekers op de web-app.
  • get - Voert een GET-bewerking uit vanaf Cosmos DB om het aantal op te halen.
  • lasttimestamp - Werkt de tijdstempel bij sinds de laatste gebruiker naar de website is gegaan.

In deze sectie gaat u het Apache JMeter-script bijwerken met de URL van uw voorbeeld-web-app.

  1. Open sampleApp.jmx in de opslagplaats van uw voorbeeldtoepassing om het te bewerken.

    Schermopname die laat zien hoe u het Apache JMeter-testscript bewerkt.

  2. Zoek naar <stringProp name="HTTPSampler.domain">.

    U ziet drie exemplaren van <stringProp name="HTTPSampler.domain"> in het bestand.

  3. Vervang de waarde door de URL van de App Service van uw voorbeeldtoepassing in alle drie de exemplaren.

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

    In de volgende stappen implementeert u de voorbeeldtoepassing in Azure App Service web-app met behulp van Azure Pipelines. Vervang op dit moment de tijdelijke tekst in het vorige XML-fragment door een unieke naam die u wilt verstrekken {your-app-name} aan App Service web-app. Vervolgens gebruikt u dezelfde naam om de web-app te maken.

    Belangrijk

    Neem of niet op in de URL van https http de voorbeeldtoepassing.

  4. Commit your changes to the main branch.

Toegangsmachtigingen voor Azure Pipelines instellen voor Azure

In deze sectie configureert u uw Azure DevOps-project om machtigingen te hebben voor toegang tot de Azure Load Testing-resource.

Voor toegang tot Azure-resources maakt u een serviceverbinding in Azure DevOps en gebruikt u op rollen gebaseerd toegangsbeheer om de benodigde machtigingen toe te wijzen.

  1. Meld u aan bij uw Azure DevOps-organisatie ( https://dev.azure.com/<yourorganization> ).

  2. Selecteer Project instellingen > Serviceverbindingen.

  3. Selecteer + Nieuwe serviceverbinding, selecteer de Azure Resource Manager serviceverbinding en selecteer vervolgens Volgende.

  4. Selecteer de verificatiemethode Service-principal (automatisch) en selecteer vervolgens Volgende.

  5. Selecteer het bereikniveau Abonnement en selecteer vervolgens uw Azure-abonnement dat uw Azure Load Testing-resource bevat.

    Schermopname die laat zien hoe u een nieuwe serviceverbinding maakt.

    In een latere stap gebruikt u de naam van de serviceverbinding om de pijplijn te configureren.

  6. Selecteer Opslaan om de verbinding te maken.

  7. Selecteer de serviceverbinding in de lijst en selecteer vervolgens Service-principal beheren.

    Schermopname die laat zien hoe u een service-principal beheert.

    U ziet de details van de service-principal in de Azure Portal. Noteer de toepassings-id (client) van de service-principal.

    Schermopname die laat zien hoe u de toepassings-id voor de serviceverbinding op kunt halen.

  8. Wijs nu de rol Inzender voor belastingstest toe aan de service-principal om toegang tot de Azure Load Testing-service toe te staan.

    Haal eerst de object-id van de service-principal op. Selecteer het objectId-resultaat uit de volgende Azure CLI-opdracht:

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

    Vervang de tekst van de tijdelijke aanduiding <sp-object-id> door de object-id van de service-principal. Vervang ook de door <subscription-name-or-id> uw Azure-abonnements-id.

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

De Werkstroom van Azure Pipelines configureren om een belastingstest uit te voeren

In deze sectie stelt u een Azure Pipelines-werkstroom in die de belastingstest activeert.

Eerst installeert u de Azure Load Testing-extensie vanuit de Azure DevOps Marketplace, maakt u een nieuwe pijplijn en verbindt u deze vervolgens met de gevorkte opslagplaats van de voorbeeldtoepassing.

  1. Installeer de azure Load Testing-taakextensie vanuit de Azure DevOps Marketplace.

    Schermopname die laat zien hoe u door de Marketplace Visual Studio extensies bladert.

    Schermopname die laat zien hoe u de Azure Load Testing-extensie installeert vanuit Visual Studio Marketplace.

  2. Selecteer pijplijnen in uw Azure DevOps-project en selecteer vervolgens Pijplijn maken.

    Schermopname die laat zien hoe u een nieuwe Azure-pijplijn maakt.

  3. Selecteer op Verbinding maken tabblad GitHub .

  4. Selecteer AzurePipelines machtigen om Azure Pipelines toegang te geven tot GitHub account voor het activeren van werkstromen.

  5. Selecteer op het tabblad Selecteren de gevorkte opslagplaats van de voorbeeldtoepassing.

    Schermopname die laat zien hoe u de opslagplaats van de voorbeeldtoepassing GitHub selecteren.

    De opslagplaats bevat het definitiebestand azure-pipeline.yml. U gaat deze definitie nu wijzigen om verbinding te maken met uw Azure Load Testing-service.

  6. Vervang op het tabblad Controleren de volgende tijdelijke aanduidingen in de YAML-code.

    Tijdelijke aanduiding Waarde
    <Name of your webapp> De Azure App Service web-app. Deze naam moet overeenkomen met de naam die wordt gebruikt voor de eindpunt-URL in het sampleApp.jmx-testscript.
    <Name of your webARM Service connection> De naam van de serviceverbinding die u in de vorige sectie hebt gemaakt.
    <Azure subscriptionId> Uw Azure-abonnements-id.
    <Name of your load test resource> De naam van uw Azure Load Testing-resource.
    <Name of your load test resource group> De naam van de resourcegroep die de Azure Load Testing-resource bevat.

    Belangrijk

    De naam van de Azure-web-app moet overeenkomen met de naam die u hebt gebruikt voor de eindpunt-URL in het sampleApp.jmx-testscript.

    Schermopname van het tabblad Azure Pipelines Review bij het maken van een pijplijn.

  7. Selecteer Opslaan en uitvoeren, voer een commit-bericht in en selecteer vervolgens Opslaan en uitvoeren.

    Schermopname die laat zien hoe u een nieuwe Azure-pijplijn kunt opslaan en uitvoeren.

    Azure Pipelines voert nu de CI/CD-werkstroom uit. U kunt de status en logboeken controleren door de pijplijn-taak te selecteren.

    Schermopname die laat zien hoe u de details van de pijplijn-taak kunt weergeven.

Resultaten van belastingstests weergeven

Voor elke update van de main branch voert de Azure-pijplijn de volgende stappen uit:

  • Implementeer de voorbeeld-Node.js toepassing in een Azure-app Services-web-app. De naam van de web-app wordt geconfigureerd in de pijplijndefinitie.
  • Activeer Azure Load Testing om de belastingstest te maken en uit te voeren op basis van het Apache JMeter-script en het YAML-bestand voor de testconfiguratie in de opslagplaats.

In deze sectie bekijkt u de resultaten van de belastingstest in de logboekgegevens van de pijplijn.

  1. Selecteer in uw Azure DevOps-project Pipelines en selecteer vervolgens uw pijplijndefinitie in de lijst.

  2. Selecteer de pijplijn-run om het overzicht van de run weer te geven.

    Schermopname van het overzicht van de pijplijnuitleiding.

  3. Selecteer Belastingstest in de sectie Taken om de pijplijnlogboeken te bekijken.

    Schermopname van het Azure Pipeline-logboek voor de run.

    Zodra de belastingstest is uitgevoerd, kunt u de samenvattingsgegevens van de test en de metrische gegevens aan de clientzijde bekijken in de pijplijnlogboeken. Het logboek toont ook de URL voor het navigeren naar het Azure Load Testing-dashboard voor deze belastingstest.

  4. Selecteer in de logboekweergave van de pijplijn de optie Belastingstest en selecteer vervolgens 1 artefact dat is geproduceerd om de resultatenbestanden van de belastingstest te downloaden.

    Schermopname die laat zien hoe u de resultaten van de belastingstest downloadt.

Criteria voor het slagen/mislukken van tests definiëren

In deze sectie voegt u foutcriteria toe om het resultaat van uw belastingstest te bepalen. Als ten minste één van de foutcriteria waar is, mislukt de belastingstest.

U kunt deze criteria opgeven in het YAML-bestand voor testconfiguratie.

  1. Bewerk het bestand SampleApp.yml in uw GitHub opslagplaats.

  2. Voeg het volgende codefragment toe aan het einde van het bestand.

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

    U hebt nu foutcriteria opgegeven voor uw belastingstest. De test mislukt als aan ten minste één van deze voorwaarden wordt voldaan:

    • De totale gemiddelde reactietijd is groter dan 100 ms.
    • Het cumulatief percentage fouten is groter dan 20%.
  3. De wijzigingen door te voeren en naar de main branch van de opslagplaats te pushen.

    De wijzigingen activeren de CI/CD-werkstroom van Azure Pipelines.

  4. Selecteer op de pagina pijplijn-runs de meest recente vermelding in de lijst.

    Nadat de belastingstest is uitgevoerd, ziet u dat de pijplijn is mislukt omdat de gemiddelde reactietijd hoger is dan u hebt opgegeven in de foutcriteria.

    Schermopname van pijplijnlogboeken na een mislukte testcriteria.

    De Azure Load Testing-service evalueert de criteria tijdens de testuitvoering. Als een van deze voorwaarden mislukt, retourneert de Azure Load Testing-service een afsluitende code die niet nul is. Deze code informeert de CI/CD-werkstroom dat de test is mislukt.

  5. Bewerk het bestand SampleApp.yml en wijzig de criteria voor testfalen.

    failureCriteria: 
        - avg(response_time_ms) > 5000
        - percentage(error) > 20
    
  6. De wijzigingen door te voeren om de CI/CD-werkstroom van Azure Pipelines te activeren.

    Schermopname van pijplijnlogboeken nadat alle testcriteria zijn geslaagd.

    De belastingstest slaagt nu en de pijplijn is voltooid.

Parameters doorgeven aan uw belastingstests vanuit de pijplijn

Vervolgens gaat u de belastingstest parameteriseren met behulp van pijplijnvariabelen. Deze variabelen kunnen geheimen zijn, zoals wachtwoorden of niet-geheimen.

In deze zelfstudie gaat u de voorbeeldtoepassing opnieuw configureren om alleen beveiligde aanvragen te accepteren. Als u een beveiligde aanvraag wilt verzenden, moet u een geheime waarde doorgeven in de HTTP-aanvraag.

  1. Bewerk het bestand SampleApp.yaml in uw GitHub opslagplaats.

    Werk de configuratie-instelling testPlan bij om het bestand SampleApp_Secrets.jmx te gebruiken.

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

    Het apache JMeter-script SampleApp_Secrets.jmx maakt gebruik van een door de gebruiker gedefinieerde variabele die de geheime waarde op haalt met de aangepaste functie ${__GetSecret(secretName)} . Apache JMeter geeft deze geheime waarde vervolgens door aan het eindpunt van de voorbeeldtoepassing.

  2. De wijzigingen door te voeren in het YAML-bestand.

  3. Bewerk het bestand config.json in uw GitHub opslagplaats.

    Werk de enableSecretsFeature instelling bij naar true om de voorbeeldtoepassing opnieuw te configureren om alleen beveiligde aanvragen te accepteren.

    {
        "enableSecretsFeature": true
    }
    
  4. De wijzigingen door te voeren in het bestand config.json.

  5. Bewerk SampleApp_Secrets.jmx-bestand.

  6. Zoek naar <stringProp name="HTTPSampler.domain">.

    U ziet drie exemplaren van <stringProp name="HTTPSampler.domain"> in het bestand.

  7. Vervang de waarde door de URL van de App Service van uw voorbeeldtoepassing in alle drie de exemplaren.

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

    U implementeert de voorbeeldtoepassing in een Azure App Service web-app met behulp van de werkstroom GitHub Acties. Vervang in het vorige XML-codefragment de tijdelijke aanduiding door de unieke naam van de {your-app-name} App Service web-app.

    Belangrijk

    Neem of niet op in de URL van https http de voorbeeldtoepassing.

  8. Sla het Apache JMeter-script op en door.

  9. Ga naar de pagina Pijplijnen, selecteer uw pijplijndefinitie en selecteer vervolgens Bewerken.

    Schermopname die laat zien hoe u een pijplijndefinitie bewerkt.

  10. Selecteer Variabelen en selecteer vervolgens Nieuwe variabele.

  11. Voer de gegevens Name (mySecret) en Value (1797669089) in en vink vervolgens het vakJe deze waarde geheim houden aan om de variabele veilig op te slaan.

    Schermopname die laat zien hoe u een nieuwe pijplijnvariabele maakt.

  12. Selecteer OK en selecteer vervolgens Opslaan om de nieuwe variabele op te slaan.

  13. Bewerk het bestand azure-pipeline.yml om het geheim door te geven aan de belastingstest.

    Bewerk de taak Azure Load Testing door het volgende YAML-fragment toe te voegen:

    secrets: |
      [
          {
          "name": "appToken",
          "value": "$(mySecret)"
          }
      ]
    
  14. Sla de pijplijn op en voer deze uit.

    Met de azure load testing-taak wordt het geheim van de pijplijn veilig aan de test-engine door geven. De geheime parameter wordt alleen gebruikt tijdens het uitvoeren van de belastingstest en vervolgens wordt de waarde uit het geheugen verwijderd.

Bekijk het overzicht van de taak Azure Load Testing in de volgende sectie.

Azure Load Testing-taak

In deze sectie wordt de taak Azure Load Testing voor Azure Pipelines beschreven. De taak is platformoverschrijdend en wordt uitgevoerd op Windows-, Linux- of Mac-agents.

U kunt de volgende parameters gebruiken om de taak Azure Load Testing te configureren.

Parameter Beschrijving
azureSubscription Vereist Naam van de Azure Resource Manager serviceverbinding.
loadTestConfigFile Vereist Pad naar het YAML-configuratiebestand van de belastingtest. Het pad is volledig gekwalificeerd of relatief ten opzichte van de standaarddirectory.
resourceGroup Vereist Naam van de resourcegroep die de Azure Load Testing-resource bevat.
loadTestResource Vereist Naam van een bestaande Azure Load Testing-resource.
secrets Matrix van JSON-objecten die bestaan uit de naam en waarde voor elk geheim. De naam moet overeenkomen met de geheime naam die wordt gebruikt in het Apache JMeter-testscript.
env Matrix van JSON-objecten die bestaan uit de naam en waarde voor elke omgevingsvariabele. De naam moet overeenkomen met de naam van de variabele die wordt gebruikt in het Apache JMeter-testscript.

In het volgende YAML-codefragment wordt beschreven hoe u de taak gebruikt in een CI/CD-werkstroom van 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>",
          }
      ]

Resources opschonen

Belangrijk

U kunt de resources die u hebt gemaakt, gebruiken als vereisten voor andere zelfstudies en artikelen met uitleg over Azure-belastingstests.

Als u niet van plan bent om een van de resources te gebruiken die u hebt gemaakt, verwijdert u deze zodat er geen verdere kosten in rekening worden gebracht.

  • In Azure Portal:

    1. Selecteer de menuknop in de linkerbovenhoek en selecteer vervolgens Resourcegroepen.

    2. Selecteer de resourcegroep die u hebt gemaakt uit de lijst.

    3. Selecteer Resourcegroep verwijderen.

      Schermopname van de selecties voor het verwijderen van een resourcegroep in de Azure-portal.

    4. Voer de naam van de resourcegroup in. Selecteer vervolgens Verwijderen.

  • U kunt ook de Azure CLI gebruiken.

    az group delete --name <yourresourcegroup>
    

    Als u de resourcegroep verwijdert, worden alle resources in de resourcegroep verwijderd.

Volgende stappen

U hebt nu een CI/CD-werkstroom voor Azure Pipelines gemaakt die gebruikmaakt van Azure Load Testing voor het automatisch uitvoeren van belastingstests. Met behulp van criteria voor doorgeven/mislukken kunt u de status van de CI/CD-werkstroom instellen. Met parameters kunt u de uitvoering van de belastingstest configureren.

  • Zie Parameterize a load test (Een belastingstest parameteriseren) voor meer informatie over het parameteriseren van belastingstests.
  • Zie Define test criteria (Testcriteria definiëren) voor meer informatie over het definiëren van testcriteria voor slagen/mislukken.