Verwenden von geheimen Schlüsseln und Umgebungsvariablen in Azure Load Testing

In diesem Artikel erfahren Sie, wie Sie geheime Schlüssel und Umgebungen als Parameter an einen Auslastungstest in Azure Load Testing übergeben. Sie können Parameter verwenden, um das Verhalten eines Ladetests zu ändern, ohne das Apache JMeter-Skript bearbeiten zu müssen. Um beispielsweise eine Webanwendung zu testen, geben Sie die Endpunkt-URL als Parameter an, um Ihr Testskript in mehreren Umgebungen wiederzuverwenden. Sie können auch Parameter verwenden, um zu vermeiden, dass vertrauliche Informationen im JMeter-Testskript hartcodieren müssen.

Der Azure Load Testing-Dienst unterstützt zwei Arten von Parametern:

  • Geheimnisse: Enthalten vertrauliche Informationen und werden sicher an die Auslastungstest-Engine übergeben. Geheimnisse stellen beispielsweise Webdienst-Anmeldeinformationen bereit, anstatt sie im Testskript hart zu codieren. Weitere Informationen finden Sie unter Konfigurieren von Auslastungstests mit Geheimnissen.

  • Umgebungsvariablen: Enthalten nicht vertrauliche Informationen und sind als Umgebungsvariablen in der Auslastungstest-Engine verfügbar. Umgebungsvariablen machen beispielsweise die Anwendungsendpunkt-URL konfigurierbar. Weitere Informationen finden Sie unter Konfigurieren von Auslastungstests mit Umgebungsvariablen.

Sie können Parameter in der Auslastungstestkonfiguration angeben, wenn Sie einen neuen Test erstellen oder einen vorhandenen Test aktualisieren. Wenn Sie einen Auslastungstest in Ihrem CI/CD-Workflow ausführen, definieren Sie Parameter in der Konfigurationsdatei zum Ladentest oder in der CI/CD-Workflowdefinition.

Voraussetzungen

Konfigurieren von Auslastungstests mit Geheimnissen

In diesem Abschnitt erfahren Sie, wie Sie Geheimnisse an Ihr Auslastungstestskript in Azure Load Testing übergeben. Beispielsweise können Sie mithilfe eines Geheimnisses den API-Schlüssel an einen Webdienstendpunkt übergeben, für den Sie einen Auslastungstest durchführen. Anstatt den API-Schlüssel in der Konfiguration zu speichern oder im Skript hartzucodieren, können Sie ihn in einem Geheimnisspeicher speichern, um den Zugriff auf das Geheimnis streng zu steuern.

Mit Azure Load Testing können Sie Geheimnisse in Azure Key Vault speichern. Alternativ können Sie beim Ausführen des Auslastungstests in einer CI/CD-Pipeline auch den Geheimnisspeicher verwenden, der Ihrer CI/CD-Technologie zugeordnet ist, z. B. Azure Pipelines oder GitHub Actions.

Führen Sie die folgenden Schritte aus, um Geheimnisse mit Azure Load Testing zu verwenden:

  1. Speichern Sie den Geheimniswert im Geheimnisspeicher (Azure Key Vault oder im CI/CD-Geheimnisspeicher).
  2. Übergeben Sie einen Verweis auf das Geheimnis an das Apache JMeter-Testskript.
  3. Verwenden Sie den Geheimniswert im Apache JMeter-Testskript mithilfe der benutzerdefinierten Funktion GetSecret.

Wichtig

Sie können die GetSecret benutzerdefinierte Funktion nur verwenden, wenn Sie Ihr JMeter-Testskript mit Azure Load Testing ausführen. Wenn Sie Ihr Testskript lokal ausführen, müssen Sie Das Testskript aktualisieren und geheime Werte auf eine andere Weise lesen.

Speichern von Auslastungstestgeheimnissen mit Azure Key Vault

Mit Azure Key Vault können Sie Geheimniswerte an Ihr Testskript in Azure Load Testing übergeben. Sie fügen einen Verweis auf den geheimen Schlüssel in der Azure Load Testing-Konfiguration hinzu. Azure Load Testing verwendet dann diesen Verweis, um den Geheimniswert im Apache JMeter-Skript abzurufen.

Außerdem müssen Sie Azure Load Testing Zugriff auf Ihren Azure Key Vault gewähren, um den geheimen Wert abzurufen.

Hinweis

Wenn Sie einen Auslastungstest im Rahmen Ihres CI/CD-Prozesses ausführen, können Sie auch den zugehörigen Geheimnisspeicher verwenden. Fahren Sie mit Verwenden des CI/CD-Geheimnisspeichers fort.

Erstellen eines geheimen Schlüssels in Azure Key Vault

  1. Fügen Sie Ihrem Schlüsseltresor den Geheimniswert hinzu, falls Sie dies noch nicht getan haben.

    Wichtig

    Wenn Sie den Zugriff auf Ihren Azure Key Vault durch eine Firewall oder ein virtuelles Netzwerk eingeschränkt haben, führen Sie die folgenden Schritte aus, um zugriff auf vertrauenswürdige Azure-Dienste zu gewähren.

  2. Rufen Sie den Geheimnisbezeichner des Schlüsseltresors für Ihr Geheimnis ab. Sie verwenden diesen geheimen Bezeichner, um den Auslastungstest zu konfigurieren.

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

    Der Geheimnisbezeichner ist der vollständige URI des Geheimnisses im Azure-Schlüsseltresor. Optional können Sie auch eine Versionsnummer einschließen. Zum Beispiel: https://myvault.vault.azure.net/secrets/mysecret/ oder https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

Hinzufügen des geheimen Schlüssels zum Auslastungstest

  1. Verweisen Sie in der Auslastungstestkonfiguration auf das Geheimnis.

    Sie definieren einen Auslastungstest-Geheimnisparameter für jedes Geheimnis, auf das Sie im Apache JMeter-Skript verweisen. Der Parametername sollte mit dem Geheimnisnamen übereinstimmen, den Sie im Apache JMeter-Testskript verwenden. Der Parameterwert ist die Sicherheits-ID des Schlüsseltresors.

    Sie können Geheimnisparameter angeben, indem Sie einen der folgenden Schritte ausführen:

    • Wählen Sie im Azure-Portal Ihren Auslastungstest aus, wählen Sie Konfigurieren und die Registerkarte Parameter aus, und geben Sie dann die Parameterdetails ein.

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

    • Wenn Sie einen CI/CD-Workflow konfigurieren und Azure Key Vault verwenden, können Sie mithilfe der secrets-Eigenschaft ein Geheimnis in der YAML-Konfigurationsdatei angeben. Weitere Informationen zur Syntax finden Sie in der YAML-Referenz zur Testkonfiguration.

  2. Geben Sie die Identität an, die Azure Load Testing für den Zugriff auf Ihre Geheimnisse in Azure Key Vault verwendet.

    Die Identität kann die vom System zugewiesene Identität der Auslastungstestressource oder eine der vom Benutzer zugewiesenen Identitäten sein. Stellen Sie sicher, dass Sie dieselbe Identität verwenden, der Sie zuvor Zugriff gewährt haben.

    Sie können die Verweisidentität des Schlüsseltresors folgendermaßen angeben:

    • Wählen Sie im Azure-Portal Ihren Auslastungstest aus, klicken Sie auf Konfigurieren und dann auf die Registerkarte Parameter, und konfigurieren Sie dann die Key Vault-Verweisidentität.

      Screenshot that shows how to select key vault reference identity.

    • Wenn Sie einen CI/CD-Workflow konfigurieren und Azure Key Vault verwenden, können Sie mithilfe der keyVaultReferenceIdentity-Eigenschaft die Verweisidentität in der YAML-Konfigurationsdatei angeben. Weitere Informationen zur Syntax finden Sie in der YAML-Referenz zur Testkonfiguration.

Gewähren des Zugriffs auf Ihren Azure-Schlüsseltresor

Wenn Sie Testschlüssel oder Zertifikate in Azure Key Vault speichern, verwendet Ihre Ressourcen zum Ladentest eine verwaltete Identität für den Zugriff auf den Schlüsseltresor. Nachdem Sie die Verwaltete Identität konfiguriert haben, müssen Sie die verwaltete Identität Ihrer Ressourcenberechtigungen zum Ladentest erteilen, um diese Werte aus dem Schlüsseltresor zu lesen.

So gewähren Sie Ihren Azure Load Testing Ressourcenberechtigungen zum Lesen von Geheimschlüsseln oder Zertifikaten aus Ihrem Azure Key Vault:

  1. Wechseln Sie im Azure-Portal zu Ihrer Azure Key Vault-Ressource.

    Wenn Sie nicht über einen Schlüsseltresor verfügen, befolgen Sie die Anweisungen unter Azure Key Vault: Schnellstart, um einen zu erstellen.

  2. Wählen Sie im linken Bereich Zugriffsrichtlinien und dann +Erstellen aus.

  3. Wählen Sie auf der Registerkarte "Berechtigungen" unter "Geheime Berechtigungen" die Option "Abrufen" und dann "Weiter" aus.

    Hinweis

    Azure Load Testing ruft Zertifikate als geheimen Schlüssel ab, um sicherzustellen, dass der private Schlüssel für das Zertifikat verfügbar ist.

  4. Suchen Sie auf der Registerkarte "Prinzipal " nach der verwalteten Identität für die Ressource "Auslastungstests", und wählen Sie dann "Weiter" aus.

    Wenn Sie eine vom System zugewiesene verwaltete Identität verwenden, entspricht der Name der verwalteten Identität mit der Ihrer Azure-Auslastungstestressource.

  5. Wählen Sie erneut Weiter aus.

    Wenn Der Test ausgeführt wird, kann die verwaltete Identität, die Ihrer Ressourcen für Die Auslastungstests zugeordnet ist, jetzt die geheimen Schlüssel oder Zertifikate für den Auslastungstest aus Dem Schlüsseltresor lesen.

Nachdem Sie nun einen Geheimschlüssel in Azure Key Vault hinzugefügt haben, einen geheimen Schlüssel für Ihren Ladetest konfiguriert haben, können Sie nun zu "Geheime Schlüssel" in Apache JMeter verwenden.

Speichern von Auslastungstestgeheimnissen mithilfe des CI/CD-Geheimnisspeichers

Wenn Sie Azure Load Testing in Ihrem CI/CD-Workflow verwenden, können Sie auch den zugehörigen Geheimnisspeicher verwenden. Sie können z. B. GitHub-Repositorygeheimnisse oder Geheimnisvariablen in Azure Pipelines verwenden.

Hinweis

Wenn Sie bereits einen Schlüsseltresor verwenden, können Sie ihn auch zum Speichern der Auslastungstestgeheimnisse verwenden. Fahren Sie mit Verwenden von Azure Key Vault fort.

So verwenden Sie geheime Schlüssel im CI/CD-Geheimspeicher und übergeben sie an Ihren Ladetest in CI/CD:

  1. Fügen Sie den Geheimniswert dem CI/CD-Geheimnisspeicher hinzu, falls er noch nicht vorhanden ist.

    In Azure Pipelines können Sie die Pipeline bearbeiten und eine Variable hinzufügen.

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

    In GitHub können Sie GitHub-Repositorygeheimnisse verwenden.

    Screenshot that shows how to add a GitHub repository secret.

    Hinweis

    Achten Sie darauf, den tatsächlichen Geheimniswert und nicht den Schlüsseltresor-Geheimnisbezeichner als Wert zu verwenden.

  2. Übergeben Sie das Geheimnis als Eingabeparameter an die Aufgabe/Aktion für Auslastungstests im CI/CD-Workflow.

    Der folgende YAML-Codeausschnitt zeigt, wie das Geheimnis an die GitHub-Aktion für Auslastungstests übergeben wird:

    - 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 }}"
            }
        ]
    

    Der folgende YAML-Codeausschnitt zeigt, wie das Geheimnis an die Azure Pipelines-Aufgabe übergeben wird:

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

    Wichtig

    Der Name des Geheimniseingabeparameters muss mit dem Namen übereinstimmen, der im Apache JMeter-Skript verwendet wird.

Sie haben nun ein Geheimnis im CI/CD-Geheimnisspeicher angegeben und einen Verweis an Azure Load Testing übergeben. Sie können jetzt das Geheimnis im Apache JMeter-Skript verwenden.

Verwenden von Geheimnissen in Apache JMeter

Als Nächstes aktualisieren Sie das Apache JMeter-Skript, um den geheimen Schlüssel zu verwenden, den Sie zuvor angegeben haben.

Zunächst erstellen Sie eine benutzerdefinierte Variable, die den Geheimniswert abruft. Anschließend können Sie diese Variable in Ihrem Test verwenden (z. B. um ein API-Token in einem HTTP-Anforderungsheader zu übergeben).

  1. Erstellen Sie eine benutzerdefinierte Variable in Ihrer JMX-Datei, und weisen Sie ihr den Geheimniswert mithilfe der benutzerdefinierten Funktion GetSecret zu.

    Die Funktion GetSecret(<my-secret-name>) verwendet den Geheimnisnamen als Argument. Sie verwenden diesen Namen auch, wenn Sie den Auslastungstest in einem späteren Schritt konfigurieren.

    Sie können die benutzerdefinierte Variable mithilfe der Apache JMeter-IDE erstellen, wie in der folgenden Abbildung dargestellt:

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

    Alternativ können Sie die JMX-Datei direkt bearbeiten, wie in diesem Beispielcodeausschnitt gezeigt:

    <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. Verweisen Sie im Testskript auf die benutzerdefinierte Variable.

    Sie können die ${}-Syntax verwenden, um im Skript auf die Variable zu verweisen. Im folgenden Beispiel verwenden Sie die udv_appToken-Variable, um einen HTTP-Header festzulegen.

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

Konfigurieren von Auslastungstests mit Umgebungsvariablen

In diesem Abschnitt verwenden Sie Umgebungsvariablen, um Parameter an Ihren Auslastungstest zu übergeben.

  1. Aktualisieren Sie das Apache JMeter-Skript, um die Umgebungsvariable zu verwenden (z. B. um den Hostnamen des Anwendungsendpunkts zu konfigurieren).

  2. Konfigurieren Sie den Auslastungstest, und übergeben Sie die Umgebungsvariable an das Testskript.

Verwenden von Umgebungsvariablen in Apache JMeter

In diesem Abschnitt aktualisieren Sie das Apache JMeter-Skript, um Umgebungsvariablen zum Steuern des Skriptverhaltens zu verwenden.

Sie definieren zuerst eine benutzerdefinierte Variable, die die Umgebungsvariable liest, und dann können Sie diese Variable in der Testausführung verwenden (z. B. zum Aktualisieren der HTTP-Domäne).

  1. Erstellen Sie eine benutzerdefinierte Variable in Ihrer JMX-Datei, und weisen Sie ihr den Wert der Umgebungsvariablen mithilfe der benutzerdefinierten Funktion System.getenv zu.

    Die System.getenv("<my-variable-name>")-Funktion nimmt den Namen der Umgebungsvariablen als Argument an. Sie verwenden diesen Namen, wenn Sie den Auslastungstest konfigurieren.

    Sie können eine benutzerdefinierte Variable mithilfe der Apache JMeter-IDE erstellen, wie in der folgenden Abbildung dargestellt:

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

    Alternativ können Sie die JMX-Datei direkt bearbeiten, wie in diesem Beispielcodeausschnitt gezeigt:

    <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. Verweisen Sie im Testskript auf die benutzerdefinierte Variable.

    Sie können die ${}-Syntax verwenden, um im Skript auf die Variable zu verweisen. Im folgenden Beispiel verwenden Sie die udv_webapp-Variable, um die Anwendungsendpunkt-URL zu konfigurieren.

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

Konfigurieren von Umgebungsvariablen in Azure Load Testing

Um Umgebungsvariablen an das Apache JMeter-Skript zu übergeben, können Sie den Auslastungstest im Azure-Portal, in der YAML-Testkonfigurationsdatei oder direkt im CI/CD-Workflow konfigurieren.

Wichtig

Wenn Sie die Umgebungsvariable für den Auslastungstest definieren, muss ihr Name mit dem Variablennamen übereinstimmen, den Sie im Apache JMeter-Skript verwendet haben.

Gehen Sie wie folgt vor, um eine Umgebungsvariable für den Auslastungstest im Azure-Portal anzugeben:

  1. Wählen Sie auf der Testkonfigurationseite die Registerkarte Parameter aus.

  2. Geben Sie im Abschnitt Umgebungsvariablen die Umgebungsvariablen Name und Wert ein, und wählen Sie dann Anwenden aus.

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

Wenn Sie den Auslastungstest in einem CI/CD-Workflow ausführen, können Sie Umgebungsvariablen in der YAML-Testkonfigurationsdatei definieren. Weitere Informationen zur Syntax finden Sie in der YAML-Referenz zur Testkonfiguration.

Alternativ können Sie Umgebungsvariablen direkt in der CI/CD-Workflowdefinition angeben. Sie verwenden Eingabeparameter für die Azure Load Testing-Aktion oder den Azure Pipelines-Task, um Umgebungsvariablen an das Apache JMeter-Skript zu übergeben.

Der folgende YAML-Codeausschnitt zeigt ein GitHub Actions-Beispiel:

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

Der folgende YAML-Codeausschnitt zeigt ein Azure Pipelines-Beispiel:

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

Häufig gestellte Fragen

Werden meine Geheimniswerte vom Azure Load Testing-Dienst gespeichert?

Nein Im Azure Load Testing-Dienst werden die Werte von Geheimnissen nicht gespeichert. Wenn Sie einen geheimen Schlüsseltresor-URI verwenden, speichert der Dienst nur den geheimen URI und ruft den Wert des Geheimnisses für jeden Testlauf ab. Wenn Sie den Wert von Geheimnissen in einem CI/CD-Workflow bereitstellen, sind die Geheimniswerte nach dem Testlauf nicht verfügbar. Sie geben diese Werte für jede Testausführung an.

Was geschieht, wenn sowohl in meiner YAML-Konfigurationsdatei als auch im CI/CD-Workflow Parameter enthalten sind?

Wenn ein Parameter sowohl in der YAML-Konfigurationsdatei als auch in der Azure Load Testing-Aktion oder azure Pipelines-Aufgabe vorhanden ist, wird der Wert aus dem CI/CD-Workflow für die Testausführung verwendet.

Ich habe einen Test in meinem CI/CD-Workflow erstellt und ausgeführt, indem ich Parameter mithilfe des Azure Load Testing-Tasks oder der Aktion übergeben habe. Kann ich diesen Test im Azure-Portal mit denselben Parametern ausführen?

Die Werte der Parameter werden nicht gespeichert, wenn sie vom CI/CD-Workflow übergeben werden. Sie müssen die Parameterwerte erneut angeben, wenn Sie den Test aus dem Azure-Portal ausführen. Sie erhalten eine Eingabeaufforderung, um die fehlenden Werte einzugeben. Für geheime Werte geben Sie den geheimen Schlüsseltresor-URI ein. Die Werte, die Sie auf der Seite für den Testlauf oder erneutes Ausführen eingeben, sind nur für diesen Testlauf gültig. Wenn Sie Änderungen auf Testebene vornehmen möchten, wechseln Sie zu Test konfigurieren, und geben Sie Ihre Parameterwerte ein.