Dela via


Använda hemligheter och miljövariabler i Azure Load Testing

I den här artikeln får du lära dig hur du skickar hemligheter och miljöer som parametrar till ett belastningstest i Azure Load Testing. Du kan använda parametrar för att ändra beteendet för ett belastningstest utan att behöva redigera Apache JMeter-skriptet. Om du till exempel vill testa ett webbprogram anger du slutpunkts-URL:en som en parameter för att återanvända testskriptet i flera miljöer. Du kan också använda parametrar för att undvika att du måste hårdkoda känslig information i JMeter-testskriptet.

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

  • Hemligheter: Innehåller känslig information och skickas säkert till belastningstestmotorn. Hemligheter ger till exempel 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. Miljövariabler gör till exempel att programmets slutpunkts-URL kan konfigureras. Mer information finns i Konfigurera belastningstester med miljövariabler.

Du kan ange parametrar i konfigurationen för belastningstest när du skapar ett nytt test eller uppdaterar ett befintligt test. Om du kör ett belastningstest i ditt CI/CD-arbetsflöde definierar du parametrar i konfigurationsfilen för belastningstest eller i CI/CD-arbetsflödesdefinitionen.

Förutsättningar

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

  • En Azure-belastningstestningsresurs. 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 får du lära dig hur du skickar hemligheter till ditt belastningstestskript i Azure Load Testing. Du kan till exempel använda en hemlighet för att skicka API-nyckeln till en webbtjänstslutpunkt som du läser in testningen. I stället för att lagra API-nyckeln i konfigurationen eller hårdkoda den i skriptet kan du spara den i ett hemligt arkiv för att noggrant kontrollera åtkomsten till hemligheten.

Med Azure Load Testing kan du lagra hemligheter i Azure Key Vault. När du kör belastningstestet i en CI/CD-pipeline kan du också använda det hemliga arkivet som är associerat med din CI/CD-teknik, till exempel Azure Pipelines eller GitHub Actions.

Om du vill använda hemligheter med Azure Load Testing utför du följande steg:

  1. Lagra det hemliga värdet i det hemliga arkivet (Azure Key Vault eller CI/CD-hemlighetsarkivet).
  2. Skicka en referens till hemligheten i Apache JMeter-testskriptet.
  3. Använd det hemliga värdet i Apache JMeter-testskriptet med hjälp av den GetSecret anpassade funktionen.

Viktigt!

Du kan bara använda den GetSecret anpassade funktionen när du kör JMeter-testskriptet med Azure Load Testing. Om du kör testskriptet lokalt måste du uppdatera testskriptet och läsa hemliga värden på ett annat sätt.

Använda Azure Key Vault för att lagra belastningstesthemligheter

Du kan använda Azure Key Vault för att skicka hemliga värden till testskriptet i Azure Load Testing. Du lägger till en referens till hemligheten i Azure Load Testing-konfigurationen. Azure Load Testing använder sedan den här referensen för att hämta det hemliga värdet i Apache JMeter-skriptet.

Du måste också ge Azure Load Testing åtkomst till ditt Azure-nyckelvalv för att hämta det hemliga värdet.

Kommentar

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

Skapa en hemlighet i Azure Key Vault

  1. Lägg till det hemliga värdet i nyckelvalvet om du inte redan har gjort det.

    Viktigt!

    Om du har begränsad åtkomst till ditt Azure-nyckelvalv via en brandvägg eller ett virtuellt nätverk följer du de här stegen för att bevilja åtkomst till betrodda Azure-tjänster.

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

    Screenshot that shows the details of a secret in an Azure key vault.

    Den hemliga identifieraren är den fullständiga URI:n för hemligheten i Azure-nyckelvalvet. 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.

Lägg till hemligheten i belastningstestet

  1. Referera till hemligheten i konfigurationen av belastningstestet.

    Du definierar en hemlighetsparameter för belastningstest för varje hemlighet som du refererar till i Apache JMeter-skriptet. Parameternamnet ska matcha det hemliga namn som du använder i Apache JMeter-testskriptet. Parametervärdet är säkerhetsidentifieraren för nyckelvalvet.

    Du kan ange hemliga parametrar genom att göra något av följande:

    • I Azure-portalen väljer du ditt belastningstest, väljer Konfigurera, väljer fliken Parametrar och anger sedan parameterinformationen.

      Screenshot that shows where to add secret details to a load test in the Azure portal.

    • Om du konfigurerar ett CI/CD-arbetsflöde och använder Azure Key Vault kan du ange en hemlighet i YAML-konfigurationsfilen med hjälp secrets av egenskapen . Mer information om syntaxen finns i YAML-referensen för testkonfiguration.

  2. Ange den identitet som Azure Load Testing använder för att komma åt dina hemligheter i Azure Key Vault.

    Identiteten kan vara den systemtilldelade identiteten för belastningstestningsresursen eller en av de användartilldelade identiteterna. Kontrollera att du använder samma identitet som du har beviljat åtkomst tidigare.

    Du kan ange referensidentiteten för nyckelvalvet genom att göra något av följande:

    • I Azure-portalen väljer du ditt belastningstest, väljer Konfigurera, väljer fliken Parametrar och konfigurerar sedan key vault-referensidentiteten.

      Screenshot that shows how to select key vault reference identity.

    • Om du konfigurerar ett CI/CD-arbetsflöde och använder Azure Key Vault kan du ange referensidentiteten i YAML-konfigurationsfilen med hjälp keyVaultReferenceIdentity av egenskapen . Mer information om syntaxen finns i YAML-referensen för testkonfiguration.

Bevilja åtkomst till ditt Azure-nyckelvalv

När du lagrar belastningstesthemligheter eller certifikat i Azure Key Vault använder din belastningstestresurs en hanterad identitet för åtkomst till nyckelvalvet. När du har konfigurerat hanteringsidentiteten måste du ge den hanterade identiteten för resursen för belastningstestning behörighet att läsa dessa värden från nyckelvalvet.

Så här beviljar du resursbehörigheter för Azure-belastningstestning för att läsa hemligheter eller certifikat från ditt Azure-nyckelvalv:

  1. I Azure-portalen går du till din Azure Key Vault-resurs.

    Om du inte har något nyckelvalv följer du anvisningarna i Azure Key Vault-snabbstarten för att skapa ett.

  2. I den vänstra rutan väljer du Åtkomstprinciper och sedan + Skapa.

  3. På fliken Behörigheter går du till Hemliga behörigheter, väljer Hämta och sedan Nästa.

    Kommentar

    Azure Load Testing hämtar certifikat som en hemlighet för att säkerställa att den privata nyckeln för certifikatet är tillgänglig.

  4. På fliken Huvudnamn söker du efter och väljer den hanterade identiteten för belastningstestningsresursen och väljer sedan Nästa.

    Om du använder en systemtilldelad hanterad identitet matchar det hanterade identitetsnamnet namnet på din Azure-belastningstestresurs.

  5. Välj Nästa igen.

    När testet körs kan den hanterade identitet som är associerad med din belastningstestningsresurs nu läsa hemligheterna eller certifikaten för belastningstestet från nyckelvalvet.

Nu när du har lagt till en hemlighet i Azure Key Vault, konfigurerat en hemlighet för belastningstestet, kan du nu gå över till Använda hemligheter i Apache JMeter.

Använd CI/CD-hemlighetsarkivet för att spara belastningstesthemligheter

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

Kommentar

Om du redan använder ett nyckelvalv kan du också använda det för att lagra belastningstesthemligheterna. Hoppa över för att använda Azure Key Vault.

Så här använder du hemligheter i CI/CD-hemlighetsarkivet och skickar dem till belastningstestet i CI/CD:

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

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

    Screenshot that shows how to add a variable to Azure Pipelines.

    I GitHub kan du använda GitHub-lagringsplatshemligheter.

    Screenshot that shows how to add a GitHub repository secret.

    Kommentar

    Se till att använda det faktiska hemliga värdet och inte nyckelvalvets hemliga identifierare som värde.

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

    Följande YAML-kodfragment visar hur du skickar hemligheten till GitHub-åtgärden För belastningstestning:

    - 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 hur du skickar hemligheten till Azure Pipelines-uppgiften:

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

    Viktigt!

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

Nu har du angett en hemlighet i CI/CD-hemlighetsarkivet och skickat en referens till Azure Load Testing. Nu kan du använda hemligheten i Apache JMeter-skriptet.

Använda hemligheter i Apache JMeter

Därefter uppdaterar du Apache JMeter-skriptet för att använda hemligheten som du angav tidigare.

Först skapar du en användardefinierad variabel som hämtar det hemliga värdet. Sedan kan du använda den här variabeln i testet (till exempel för att skicka en API-token i ett HTTP-begärandehuvud).

  1. Skapa en användardefinierad variabel i JMX-filen och tilldela det hemliga värdet med hjälp av den GetSecret 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.

    Du kan skapa den användardefinierade variabeln med hjälp av Apache JMeter IDE, enligt följande bild:

    Screenshot that shows how to add user-defined variables to your Apache JMeter script.

    Du kan 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>
    

Konfigurera belastningstester med miljövariabler

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

  1. Uppdatera Apache JMeter-skriptet så att det använder miljövariabeln (till exempel för att konfigurera programslutpunktens vä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 för att använda miljövariabler för att styra skriptbeteendet.

Först definierar du en användardefinierad variabel som läser miljövariabeln och 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 System.getenv av funktionen.

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

    Du kan skapa en användardefinierad variabel med hjälp av Apache JMeter IDE, enligt följande bild:

    Screenshot that shows how to add user-defined variables for environment variables to your JMeter script.

    Du kan 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 udv_webapp för 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-portalen, i YAML-testkonfigurationsfilen eller direkt i CI/CD-arbetsflödet.

Viktigt!

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

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

  1. På testkonfigurationssidan väljer du fliken Parametrar .

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

    Screenshot that shows how to add an environment variable to a load test in the Azure portal.

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 för testkonfiguration.

Du kan också ange miljövariabler direkt i CI/CD-arbetsflödesdefinitionen. Du använder indataparametrar för åtgärden Azure Load Testing 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

Lagrar Tjänsten Azure Load Testing mina hemliga värden?

Nej. Azure Load Testing-tjänsten lagrar inte värdena för hemligheter. När du använder en hemlig URI för nyckelvalv lagrar tjänsten endast den hemliga URI:n och hämtar värdet för hemligheten för varje testkörning. Om du anger 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 i både min YAML-konfigurationsfil och CI/CD-arbetsflödet?

Om det finns en parameter i både YAML-konfigurationsfilen och åtgärden Azure Load Testing eller Azure Pipelines används värdet från CI/CD-arbetsflödet för testkörningen.

Jag skapade och körde ett test från mitt CI/CD-arbetsflöde genom att skicka parametrar med hjälp av azure load testing-uppgiften eller åtgärden. Kan jag köra det här testet från Azure-portalen 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-portalen. Du får en uppmaning om att ange de värden som saknas. För hemliga värden anger du nyckelvalvets hemliga URI. De värden som du anger på testkörnings- eller omkö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.