Skapa konfigurerbara belastningstester med hemligheter och miljövariabler

Lär dig hur du ändrar beteendet för ett belastningstest utan att behöva redigera 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.

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

  • Hemligheter: Innehåller känslig information och skickas säkert till lasttestmotorn. Hemligheter ger till exempel autentiseringsuppgifter för webbtjänsten i stället för hårdkodning 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 programmets slutpunkts-URL konfigurerbar. Mer information finns i Konfigurera belastningstester med miljövariabler.

Viktigt

Azure Load Testing är för närvarande i förhandsversion. Juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller som ännu inte har släppts i allmän tillgänglighet 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 Load Testing-resurs. 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 密钥保管库. När du kör belastningstestet i en CI/CD-pipeline kan du också använda det hemliga arkiv som är kopplat till 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 密钥保管库 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.

Använda Azure 密钥保管库 för att lagra belastningstesthemligheter

Du kan använda Azure 密钥保管库 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.

Anteckning

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

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

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

    Skärmbild som visar information om en hemlighet i ett Azure-nyckelvalv.

    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.

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

    Om du vill hämta hemligheten från ditt Azure-nyckelvalv måste du ge läsbehörighet till din Azure Load Testing-resurs. För att aktivera detta måste du först ange en identitet för din belastningstestningsresurs. Azure Load Testing kan använda en systemtilldelad eller användartilldelad identitet.

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

  4. Referera till hemligheten i belastningstestkonfigurationen.

    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-Portal väljer du belastningstestet, väljer Konfigurera, väljer fliken Parametrar och anger sedan parameterinformationen.

      Skärmbild som visar var du lägger till hemlig information i ett belastningstest i Azure-Portal.

    • Om du konfigurerar ett CI/CD-arbetsflöde och använder Azure 密钥保管库 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.

  5. Ange den identitet som Azure Load Testing använder för att komma åt dina hemligheter i Azure 密钥保管库.

    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-Portal väljer du belastningstestet, väljer Konfigurera, väljer fliken Parametrar och konfigurerar sedan 密钥保管库 referensidentitet.

    Skärmbild som visar hur du väljer referensidentitet för nyckelvalv.

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

Nu har du angett en hemlighet i Azure 密钥保管库 och konfigurerat azure load testing-resursen för att hämta dess värde. Nu kan du flytta till Använda hemligheter i Apache JMeter.

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

Du kan använda Azure 密钥保管库 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.

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.

Först lägger du till en hemlighet i CI/CD-hemlighetsarkivet. I CI/CD-arbetsflödet skickar du sedan det hemliga värdet till Azure Load Testing-uppgiften/åtgärden.

Anteckning

Om du redan använder ett nyckelvalv kan du också använda det för att lagra belastningstesthemligheterna. Gå vidare till Använd Azure 密钥保管库.

  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.

    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 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-kodavsnitt 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-kodavsnitt 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

I det här avsnittet uppdaterar du Apache JMeter-skriptet så att det använder 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 till den 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:

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

    Du kan också redigera JMX-filen direkt, som du ser i det här kodfragmentet i exemplet:

    <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 för att använda 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:

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

    Du kan också redigera JMX-filen direkt, som du ser i det här kodfragmentet i exemplet:

    <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-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 av Azure-Portal 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.

    Skärmbild som visar hur du lägger till en miljövariabel i ett belastningstest i 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 yaml-konfigurationsfilen och CI/CD-arbetsflödet?

Om det finns en parameter i både YAML-konfigurationsfilen och Azure Load Testing-åtgärden eller Azure Pipelines-aktiviteten 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-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 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.

Nästa steg