Usare segreti e variabili di ambiente in Test di carico di Azure

Questo articolo illustra come passare segreti e ambienti come parametri a un test di carico in Test di carico di Azure. È possibile usare i parametri per modificare il comportamento di un test di carico senza dover modificare lo script Apache JMeter. Ad esempio, per testare un'applicazione Web, specificare l'URL dell'endpoint come parametro per riutilizzare lo script di test in più ambienti. È anche possibile usare i parametri per evitare che sia necessario impostare come hardcoded informazioni riservate nello script di test di JMeter.

Il servizio Test di carico di Azure supporta due tipi di parametri:

  • Segreti: contengono informazioni riservate e vengono passate in modo sicuro al motore di test di carico. Ad esempio, i segreti forniscono le credenziali del servizio Web anziché impostarle come hardcoded nello script di test. Per altre informazioni, vedere Configurare i test di carico con segreti.

  • Variabili di ambiente: contengono informazioni non sensibili e sono disponibili come variabili di ambiente nel motore di test di carico. Ad esempio, le variabili di ambiente rendono configurabile l'URL dell'endpoint dell'applicazione. Per altre informazioni, vedere Configurare i test di carico con le variabili di ambiente.

È possibile specificare i parametri nella configurazione del test di carico quando si crea un nuovo test o si aggiorna un test esistente. Se si esegue un test di carico nel flusso di lavoro CI/CD, si definiscono i parametri nel file di configurazione del test di carico o nella definizione del flusso di lavoro CI/CD.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Una risorsa di test di carico di Azure. Se è necessario creare una risorsa test di carico di Azure, vedere la guida introduttiva Creare ed eseguire un test di carico.

Configurare i test di carico con segreti

In questa sezione si apprenderà come passare segreti allo script di test di carico in Test di carico di Azure. Ad esempio, è possibile usare un segreto per passare la chiave API a un endpoint del servizio Web di cui si sta eseguendo il test di carico. Anziché archiviare la chiave API nella configurazione o nel hardcoded nello script, è possibile salvarla in un archivio segreto per controllare rigorosamente l'accesso al segreto.

Test di carico di Azure consente di archiviare i segreti in Azure Key Vault. In alternativa, quando si esegue il test di carico in una pipeline CI/CD, è anche possibile usare l'archivio segreto associato alla tecnologia CI/CD, ad esempio Azure Pipelines o GitHub Actions.

Per usare i segreti con Test carico di Azure, seguire questa procedura:

  1. Archiviare il valore del segreto nell'archivio segreto (Azure Key Vault o nell'archivio segreto CI/CD).
  2. Passare un riferimento al segreto nello script di test di Apache JMeter.
  3. Usare il valore del segreto nello script di test di Apache JMeter usando la GetSecret funzione personalizzata.

Importante

È possibile usare la GetSecret funzione personalizzata solo quando si esegue lo script di test di JMeter con Test di carico di Azure. Se si esegue lo script di test in locale, è necessario aggiornare lo script di test e leggere i valori dei segreti in modo diverso.

Usare Azure Key Vault per archiviare i segreti dei test di carico

È possibile usare Azure Key Vault per passare i valori dei segreti allo script di test in Test di carico di Azure. Aggiungere un riferimento al segreto nella configurazione di Test di carico di Azure. Test di carico di Azure usa quindi questo riferimento per recuperare il valore del segreto nello script Apache JMeter.

È anche necessario concedere ad Azure Load Testing l'accesso all'insieme di credenziali delle chiavi di Azure per recuperare il valore del segreto.

Nota

Se si esegue un test di carico come parte del processo CI/CD, è anche possibile usare l'archivio segreto correlato. Passare a Usare l'archivio segreto CI/CD.

Creare un segreto in Azure Key Vault

  1. Aggiungere il valore del segreto all'insieme di credenziali delle chiavi, se non è già stato fatto.

    Importante

    Se l'accesso all'insieme di credenziali delle chiavi di Azure è limitato da un firewall o da una rete virtuale, seguire questa procedura per concedere l'accesso ai servizi di Azure attendibili.

  2. Recuperare l'identificatore del segreto dell'insieme di credenziali delle chiavi per il segreto. Usare questo identificatore segreto per configurare il test di carico.

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

    L'identificatore del segreto è l'URI completo del segreto nell'insieme di credenziali delle chiavi di Azure. Facoltativamente, è anche possibile includere un numero di versione. Ad esempio, https://myvault.vault.azure.net/secrets/mysecret/ o https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

Aggiungere il segreto al test di carico

  1. Fare riferimento al segreto nella configurazione del test di carico.

    Si definisce un parametro segreto di test di carico per ogni segreto a cui si fa riferimento nello script Apache JMeter. Il nome del parametro deve corrispondere al nome del segreto usato nello script di test di Apache JMeter. Il valore del parametro è l'identificatore di sicurezza dell'insieme di credenziali delle chiavi.

    È possibile specificare i parametri dei segreti eseguendo una delle operazioni seguenti:

    • Nella portale di Azure selezionare il test di carico, selezionare Configura, selezionare la scheda Parametri e quindi immettere i dettagli del parametro.

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

    • Se si configura un flusso di lavoro CI/CD e si usa Azure Key Vault, è possibile specificare un segreto nel file di configurazione YAML usando la secrets proprietà . Per altre informazioni sulla sintassi, vedere Le informazioni di riferimento su YAML sulla configurazione di test.

  2. Specificare l'identità usata da Test di carico di Azure per accedere ai segreti in Azure Key Vault.

    L'identità può essere l'identità assegnata dal sistema della risorsa di test di carico o una delle identità assegnate dall'utente. Assicurarsi di usare la stessa identità concessa in precedenza.

    È possibile specificare l'identità di riferimento dell'insieme di credenziali delle chiavi eseguendo una delle operazioni seguenti:

    • Nella portale di Azure selezionare il test di carico, selezionare Configura, selezionare la scheda Parametri e quindi configurare l'identità di riferimento di Key Vault.

      Screenshot that shows how to select key vault reference identity.

    • Se si configura un flusso di lavoro CI/CD e si usa Azure Key Vault, è possibile specificare l'identità di riferimento nel file di configurazione YAML usando la keyVaultReferenceIdentity proprietà . Per altre informazioni sulla sintassi, vedere Le informazioni di riferimento su YAML sulla configurazione di test.

Concedere l'accesso all'insieme di credenziali delle chiavi di Azure

Quando si archivino segreti o certificati di test di carico in Azure Key Vault, la risorsa di test di carico usa un'identità gestita per l'accesso all'insieme di credenziali delle chiavi. Dopo aver configurato l'identità di gestione, è necessario concedere all'identità gestita delle risorse di test di carico le autorizzazioni per leggere questi valori dall'insieme di credenziali delle chiavi.

Per concedere alle risorse di test di carico di Azure le autorizzazioni per leggere segreti o certificati dall'insieme di credenziali delle chiavi di Azure:

  1. Nella portale di Azure passare alla risorsa dell'insieme di credenziali delle chiavi di Azure.

    Se non si ha un insieme di credenziali delle chiavi, seguire le istruzioni riportate in Avvio rapido di Azure Key Vault per crearne uno.

  2. Nel riquadro sinistro selezionare Criteri di accesso e quindi + Crea.

  3. Nella scheda Autorizzazioni, in Autorizzazioni segrete, selezionare Recupera e quindi selezionare Avanti.

    Nota

    Test di carico di Azure recupera i certificati come segreto per assicurarsi che la chiave privata per il certificato sia disponibile.

  4. Nella scheda Entità cercare e selezionare l'identità gestita per la risorsa di test di carico e quindi selezionare Avanti.

    Se si usa un'identità gestita assegnata dal sistema, il nome dell'identità gestita corrisponde a quello della risorsa di test di carico di Azure.

  5. Selezionare di nuovo Avanti.

    Quando viene eseguito il test, l'identità gestita associata alla risorsa di test di carico può ora leggere i segreti o i certificati per il test di carico dall'insieme di credenziali delle chiavi.

Ora che è stato aggiunto un segreto in Azure Key Vault, è stato configurato un segreto per il test di carico, è ora possibile passare a Usare segreti in Apache JMeter.

Usare l'archivio segreto CI/CD per salvare i segreti dei test di carico

Se si usa Test di carico di Azure nel flusso di lavoro CI/CD, è anche possibile usare l'archivio segreto associato. Ad esempio, è possibile usare i segreti del repository GitHub o le variabili segrete in Azure Pipelines.

Nota

Se si usa già un insieme di credenziali delle chiavi, è anche possibile usarlo per archiviare i segreti del test di carico. Passare a Usare Azure Key Vault.

Per usare i segreti nell'archivio segreto CI/CD e passarli al test di carico in CI/CD:

  1. Aggiungere il valore del segreto all'archivio segreto CI/CD, se non esiste ancora.

    In Azure Pipelines è possibile modificare la pipeline e aggiungere una variabile.

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

    In GitHub è possibile usare i segreti del repository GitHub.

    Screenshot that shows how to add a GitHub repository secret.

    Nota

    Assicurarsi di usare il valore del segreto effettivo e non l'identificatore del segreto dell'insieme di credenziali delle chiavi come valore.

  2. Passare il segreto come parametro di input all'attività/azione Test di carico nel flusso di lavoro CI/CD.

    Il frammento di codice YAML seguente illustra come passare il segreto all'azione GitHub test di carico:

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

    Il frammento di codice YAML seguente illustra come passare il segreto all'attività di Azure Pipelines:

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

    Importante

    Il nome del parametro di input del segreto deve corrispondere al nome usato nello script Apache JMeter.

È stato ora specificato un segreto nell'archivio segreto CI/CD e è stato passato un riferimento a Test carico di Azure. È ora possibile usare il segreto nello script Apache JMeter.

Usare i segreti in Apache JMeter

Aggiornare quindi lo script Apache JMeter per usare il segreto specificato in precedenza.

Creare prima di tutto una variabile definita dall'utente che recupera il valore del segreto. È quindi possibile usare questa variabile nel test, ad esempio per passare un token API in un'intestazione di richiesta HTTP.

  1. Creare una variabile definita dall'utente nel file JMX e assegnarvi il valore del segreto usando la GetSecret funzione personalizzata.

    La GetSecret(<my-secret-name>) funzione accetta il nome del segreto come argomento. Questo nome viene usato quando si configura il test di carico in un passaggio successivo.

    È possibile creare la variabile definita dall'utente usando l'IDE apache JMeter, come illustrato nell'immagine seguente:

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

    In alternativa, è possibile modificare direttamente il file JMX, come illustrato in questo frammento di codice di esempio:

    <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. Fare riferimento alla variabile definita dall'utente nello script di test.

    È possibile usare la ${} sintassi per fare riferimento alla variabile nello script. Nell'esempio seguente viene usata la udv_appToken variabile per impostare un'intestazione HTTP.

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

Configurare i test di carico con le variabili di ambiente

In questa sezione si usano le variabili di ambiente per passare i parametri al test di carico.

  1. Aggiornare lo script Apache JMeter per usare la variabile di ambiente , ad esempio per configurare il nome host dell'endpoint dell'applicazione.

  2. Configurare il test di carico e passare la variabile di ambiente allo script di test.

Usare le variabili di ambiente in Apache JMeter

In questa sezione si aggiorna lo script Apache JMeter per usare le variabili di ambiente per controllare il comportamento dello script.

Per prima cosa si definisce una variabile definita dall'utente che legge la variabile di ambiente e quindi è possibile usare questa variabile nell'esecuzione del test, ad esempio per aggiornare il dominio HTTP.

  1. Creare una variabile definita dall'utente nel file JMX e assegnarvi il valore della variabile di ambiente usando la System.getenv funzione .

    La System.getenv("<my-variable-name>") funzione accetta il nome della variabile di ambiente come argomento. Questo nome viene usato quando si configura il test di carico.

    È possibile creare una variabile definita dall'utente usando l'IDE apache JMeter, come illustrato nell'immagine seguente:

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

    In alternativa, è possibile modificare direttamente il file JMX, come illustrato in questo frammento di codice di esempio:

    <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. Fare riferimento alla variabile definita dall'utente nello script di test.

    È possibile usare la ${} sintassi per fare riferimento alla variabile nello script. Nell'esempio seguente viene usata la udv_webapp variabile per configurare l'URL dell'endpoint dell'applicazione.

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

Configurare le variabili di ambiente in Test di carico di Azure

Per passare le variabili di ambiente allo script Apache JMeter, è possibile configurare il test di carico nel portale di Azure, nel file di configurazione del test YAML o direttamente nel flusso di lavoro CI/CD.

Importante

Quando si definisce la variabile di ambiente per il test di carico, il nome deve corrispondere al nome della variabile usato nello script Apache JMeter.

Per specificare una variabile di ambiente per il test di carico usando il portale di Azure, eseguire le operazioni seguenti:

  1. Nella pagina di configurazione del test selezionare la scheda Parametri .

  2. Nella sezione Variabili di ambiente immettere il nome e il valore della variabile di ambiente e quindi selezionare Applica.

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

Se si esegue il test di carico in un flusso di lavoro CI/CD, è possibile definire le variabili di ambiente nel file di configurazione del test YAML. Per altre informazioni sulla sintassi, vedere Le informazioni di riferimento su YAML sulla configurazione di test.

In alternativa, è possibile specificare direttamente le variabili di ambiente nella definizione del flusso di lavoro CI/CD. È possibile usare i parametri di input per l'azione Test di carico di Azure o l'attività Azure Pipelines per passare le variabili di ambiente allo script Apache JMeter.

Il frammento YAML seguente mostra un esempio di GitHub Actions:

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

Il frammento YAML seguente mostra un esempio di Azure Pipelines:

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

Domande frequenti

Il servizio Test di carico di Azure archivia i valori dei segreti?

No. Il servizio Test di carico di Azure non archivia i valori dei segreti. Quando si usa un URI segreto dell'insieme di credenziali delle chiavi, il servizio archivia solo l'URI segreto e recupera il valore del segreto per ogni esecuzione di test. Se si specifica il valore dei segreti in un flusso di lavoro CI/CD, i valori dei segreti non sono disponibili dopo l'esecuzione del test. Questi valori vengono specificati per ogni esecuzione di test.

Cosa accade se sono presenti parametri sia nel file di configurazione YAML che nel flusso di lavoro CI/CD?

Se esiste un parametro sia nel file di configurazione YAML che nell'azione Test di carico di Azure o nell'attività Azure Pipelines, il valore del flusso di lavoro CI/CD viene usato per l'esecuzione del test.

È stato creato ed eseguito un test dal flusso di lavoro CI/CD passando parametri usando l'attività o l'azione Test di carico di Azure. È possibile eseguire questo test dal portale di Azure con gli stessi parametri?

I valori dei parametri non vengono archiviati quando vengono passati dal flusso di lavoro CI/CD. È necessario specificare di nuovo i valori dei parametri quando si esegue il test dal portale di Azure. Viene visualizzato un prompt per immettere i valori mancanti. Per i valori dei segreti, immettere l'URI del segreto dell'insieme di credenziali delle chiavi. I valori immessi durante l'esecuzione del test o la pagina di riesecuzione sono validi solo per l'esecuzione del test. Per apportare modifiche a livello di test, passare a Configura test e immettere i valori dei parametri.

  • Usare i segreti per testare gli endpoint protetti da test di carico.
  • Per altre informazioni sulla lettura di file CSV, vedere Leggere i file CSV nei test di carico.