Göra konfigurerbara belastningstester med hemligheter och miljövariabler

Lär dig hur du ändrar beteendet för ett belastningstest utan att göra ändringar i Apache JMeter-skriptet. Med förhandsversionen av Azure Load Testing kan du använda parametrar för att skapa ett konfigurerbart testskript. Du kan till exempel omvandla programslutpunkten till en parameter för att återanvända testskriptet i flera miljöer.

Azure Load Testing-tjänsten stöder två typer av parametrar:

  • Hemligheter: innehåller känslig information och skickas säkert till belastningstestmotorn. Du kan till exempel ange autentiseringsuppgifter för webbtjänsten i stället för att hårdkoda dem i testskriptet. Mer information finns i Konfigurera belastningstester med hemligheter.

  • Miljövariabler: innehåller icke-känslig information och är tillgängliga som miljövariabler i belastningstestmotorn. Till exempel för att göra programmets slutpunkts-URL konfigurerbar. Mer information finns i Konfigurera belastningstester med miljövariabler.

Viktigt

Azure Load Testing är för närvarande en 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.

  • En azure-resurs för belastningstestning. Om du behöver skapa en Azure Load Testing-resurs kan du läsa snabbstarten Skapa och köra ett belastningstest.

Konfigurera belastningstester med hemligheter

I det här avsnittet konfigurerar du belastningstestet för att skicka hemligheter till ditt belastningstestskript.

  1. Uppdatera Apache JMeter-skriptet för att acceptera och använda en hemlig indataparameter. Till exempel en webbtjänstautentiseringstoken som du skickar till ett HTTP-huvud.

  2. Lagra det hemliga värdet i ett hemligt arkiv, vilket gör att du kan kontrollera åtkomsten. Azure Load Testing integreras med Azure Key Vault eller med det hemliga arkivet som är länkat till ditt CI/CD-arbetsflöde.

  3. Konfigurera belastningstestet och skicka en referens för hemligheten till testskriptet.

Använda hemligheter i Apache JMeter

I det här avsnittet uppdaterar du Apache JMeter-skriptet till att använda en hemlighet som indataparameter.

Först definierar du en användardefinierad variabel som hämtar det hemliga värdet. Sedan kan du använda den här variabeln i testkörningen, till exempel för att ange ett HTTP-begärandehuvud.

  1. Skapa en användardefinierad variabel i JMX-filen och tilldela det hemliga värdet till den med hjälp av GetSecret den anpassade funktionen.

    Funktionen GetSecret(<my-secret-name>) tar det hemliga namnet som ett argument. Du använder samma namn när du konfigurerar belastningstestet i ett senare steg.

    Följande skärmbild visar hur du skapar en användardefinierad variabel med hjälp av Apache JMeter IDE.

    Skärmbild som visar hur du lägger till användardefinierade variabler i Apache JMeter-skriptet.

    I stället kan du också redigera JMX-filen direkt, som du ser i det här exempelkodfragmentet:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_appToken</stringProp>
          <stringProp name="Argument.value">${__GetSecret(appToken)}</stringProp>
          <stringProp name="Argument.desc">Value for x-secret header </stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. Referera till den användardefinierade variabeln i testskriptet.

    Du kan använda ${} syntaxen för att referera till variabeln i skriptet. I följande exempel använder du variabeln udv_appToken för att ange ett HTTP-huvud.

      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
        <collectionProp name="HeaderManager.headers">
          <elementProp name="" elementType="Header">
            <stringProp name="Header.name">api-key</stringProp>
            <stringProp name="Header.value">${udv_appToken}</stringProp>
          </elementProp>
        </collectionProp>
      </HeaderManager>
    

Använda Azure Key Vault

När du skapar ett belastningstest i Azure Portal eller använder en YAML-testkonfigurationsfilanvänder du en referens till en Azure Key Vault hemlighet.

Anteckning

Om du kör ett belastningstest som en del av CI/CD-processen kan du också använda det relaterade hemlighetslagret. Gå vidare till Använda CI/CD-hemlighetsarkivet.

  1. Lägg till hemligheten Azure Key Vault, om den inte finns ännu.

  2. Hämta den Key Vault identifieraren för din hemlighet. Du använder den här hemliga identifieraren för att konfigurera belastningstestet.

    Skärmbild som visar information om hemligheten i Azure Key Vault.

    Den hemliga identifieraren är den fullständiga URI:en för hemligheten i Azure Key Vault. Du kan också inkludera ett versionsnummer. Exempel: https://myvault.vault.azure.net/secrets/mysecret/ eller https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

  3. Ge din Azure Load Testing-resurs åtkomst till Key Vault.

    Din Azure Load Testing-resurs har inte behörighet att hämta hemligheter från Azure Key Vault. Först aktiverar du system tilldelad hanterad identitet för din resurs för belastningstestning. Sedan beviljar du läsbehörighet till den här hanterade identiteten.

    Information om hur du ger Azure Load Testing åtkomst till Key Vault finns i Använda hanterade identiteter för Azure Load Testing.

  4. Referera till hemligheten i belastningstestkonfigurationen.

    Du definierar en parameter för belastningstesthemlighet för varje hemlighet som du refererar till i Apache JMeter-skriptet. Parameternamnet ska matcha det namn som du använde i testskriptet. Värdet för den hemliga parametern är Key Vault säkerhetsidentifierare.

    Du kan ange parametrar för hemligheter i Azure Portal eller i YAML-konfigurationsfilen för belastningstestet.

    I Azure Portal väljer du ditt belastningstest, väljer Konfigurera och anger parameterinformationen på fliken Parametrar.

    Skärmbild som visar hur du lägger till hemlig information i ett belastningstest.

    I stället kan du också ange en hemlighet i YAML-konfigurationsfilen. Mer information om syntaxen finns i YAML-referensen testkonfiguration.

Använda CI/CD-hemlighetslagret

Om du använder Azure Load Testing i CI/CD-arbetsflödet kan du också använda det associerade hemlighetslagret. Du kan till exempel använda GitHub lagringsplatshemlighetereller hemliga variabler i Azure Pipelines.

Anteckning

Om du redan använder Azure Key Vault kan du även använda den för att lagra hemligheterna för belastningstestet. Gå vidare till Använda Azure KeyVault.

  1. Lägg till det hemliga värdet i CI/CD-hemlighetslagret, om det inte finns ännu.

    I Azure Pipelines kan du redigera pipelinen och lägga till variabeln.

    Skärmbild som visar hur du lägger till en variabel i Azure Pipelines.

    I GitHub kan du använda GitHub lagringsplatshemligheter.

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

    Anteckning

    Se till att använda det faktiska hemliga värdet och inte Key Vault identifierare för hemligheter som värde.

  2. Skicka hemligheten som en indataparameter för uppgiften/åtgärden Belastningstestning i CI/CD-arbetsflödet.

    Följande YAML-kodfragment visar ett GitHub Actions-exempel.

    - name: 'Azure Load Testing'
      uses: azure/load-testing@v1
      with:
        loadtestConfigFile: 'SampleApp.yaml'
        loadtestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
        [
            {
            "name": "appToken",
            "value": "${{ secrets.MY_SECRET }}",
            }
        ]
    

    Följande YAML-kodfragment visar ett Azure Pipelines-exempel.

    - task: AzureLoadTest@1
      inputs:
        azureSubscription: 'MyAzureLoadTestingRG'
        loadTestConfigFile: 'SampleApp.yaml'
        loadTestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
          [
              {
              "name": "appToken",
              "value": "$(mySecret)",
              }
          ]
    

    Viktigt

    Namnet på den hemliga parametern måste matcha namnet som används i Apache JMeter-skriptet.

Konfigurera belastningstester med miljövariabler

I det här avsnittet använder du miljövariabler för att skicka parametrar till ditt belastningstest.

  1. Uppdatera Apache JMeter-skriptet så att miljövariabeln används. Till exempel för att konfigurera programmets slutpunktsvärdnamn.

  2. Konfigurera belastningstestet och skicka miljövariabeln till testskriptet.

Använda miljövariabler i Apache JMeter

I det här avsnittet uppdaterar du Apache JMeter-skriptet till att använda miljövariabler för att styra skriptbeteendet.

Först definierar du en användardefinierad variabel som läser miljövariabeln. Sedan kan du använda den här variabeln i testkörningen, till exempel för att uppdatera HTTP-domänen.

  1. Skapa en användardefinierad variabel i JMX-filen och tilldela miljövariabelns värde till den med hjälp av System.getenv funktionen .

    Funktionen System.getenv("<my-variable-name>") tar miljövariabelnamnet som ett argument. Du använder samma namn när du konfigurerar belastningstestet.

    Följande skärmbild visar hur du skapar en användardefinierad variabel med hjälp av Apache JMeter IDE.

    Skärmbild som visar hur du lägger till användardefinierade variabler för miljövariabler i JMeter-skriptet.

    I stället kan du också redigera JMX-filen direkt, som du ser i det här exempelkodfragmentet:

    <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
      <collectionProp name="Arguments.arguments">
        <elementProp name="appToken" elementType="Argument">
          <stringProp name="Argument.name">udv_webapp</stringProp>
          <stringProp name="Argument.value">${__BeanShell( System.getenv("webapp") )}</stringProp>
          <stringProp name="Argument.desc">Web app URL</stringProp>
          <stringProp name="Argument.metadata">=</stringProp>
        </elementProp>
      </collectionProp>
    </Arguments>
    
  2. Referera till den användardefinierade variabeln i testskriptet.

    Du kan använda ${} syntaxen för att referera till variabeln i skriptet. I följande exempel använder du variabeln för udv_webapp att konfigurera programmets slutpunkts-URL.

    <stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
    

Konfigurera miljövariabler i Azure Load Testing

Om du vill skicka miljövariabler till Apache JMeter-skriptet kan du konfigurera belastningstestet i Azure Portal, i YAML-testkonfigurationsfilen eller direkt i CI/CD-arbetsflödet.

Viktigt

När du definierar miljövariabeln för belastningstestet måste dess namn matcha variabelnamnet som du använde i Apache JMeter-skriptet.

Om du vill ange en miljövariabel för belastningstestet med hjälp Azure Portal gör du följande:

  1. På sidan testkonfiguration går du till fliken Parametrar.

  2. I avsnittet Miljövariabler anger du miljövariabeln Namn och Värde och väljer sedan Tillämpa.

    Skärmbild som visar hur du lägger till en miljövariabel i ett belastningstest.

Om du kör belastningstestet i ett CI/CD-arbetsflöde kan du definiera miljövariabler i YAML-testkonfigurationsfilen. Mer information om syntaxen finns i YAML-referensen testkonfiguration.

Du kan också ange miljövariabler direkt i CI/CD-arbetsflödesdefinitionen. Du använder indataparametrar för åtgärden GitHub eller Azure Pipelines för att skicka miljövariabler till Apache JMeter-skriptet.

Följande YAML-kodfragment visar ett GitHub Actions-exempel.

- name: 'Azure Load Testing'
  uses: azure/load-testing
  with:
    loadtestConfigFile: 'SampleApp.yaml'
    loadtestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
    [
        {
        "name": "webapp",
        "value": "myapplication.contoso.com",
        }
    ]

Följande YAML-kodfragment visar ett Azure Pipelines-exempel.

- task: AzureLoadTest@1
  inputs:
    azureSubscription: 'MyAzureLoadTestingRG'
    loadTestConfigFile: 'SampleApp.yaml'
    loadTestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
      [
          {
          "name": "webapp",
          "value": "myapplication.contoso.com",
          }
      ]

Vanliga frågor

Lagras mina hemlighetsvärden av Azure Load Testing-tjänsten?

Nej. Värdena för hemligheter lagras inte av azure-tjänsten för belastningstestning. När du använder Azure Key Vault en hemlig URI lagrar tjänsten endast den hemliga URI:en och hämtar värdet för hemligheten för varje testkörning. Om du angav värdet för hemligheter i ett CI/CD-arbetsflöde är de hemliga värdena inte tillgängliga efter testkörningen. Du anger dessa värden för varje testkörning.

Vad händer om jag har parametrar både i min YAML-konfigurationsfil och i CI/CD-arbetsflödet?

Om det finns en parameter i både YAML-konfigurationsfilen och Azure Pipelines-uppgiften eller GitHub-åtgärden används värdet för Azure Pipelines-uppgiften eller GitHub-åtgärden för testkörningen.

Jag har skapat och kört ett test från mitt CI/CD-arbetsflöde genom att skicka parametrar med hjälp av Azure Load Testing-uppgiften/-åtgärden. Kan jag köra det här testet Azure Portal med samma parametrar?

Värdena för parametrarna lagras inte när de skickas från CI/CD-arbetsflödet. Du måste ange parametervärdena igen när du kör testet från Azure Portal. Du uppmanas att ange de värden som saknas. För hemliga värden anger du den Azure Key Vault URI:en. Värdena som anges på testkörningen eller körningssidan är endast giltiga för den testkörningen. Om du vill göra ändringar på testnivå går du till Konfigurera test och anger dina parametervärden.