Condividi tramite


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 o Locust. 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 di dover incorporare direttamente le informazioni riservate nello script di test.

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 esecuzione dei 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.

  • Risorsa del test di carico di Azure. Se è necessario creare una risorsa Test di carico di Azure, vedere l'avvio rapido Creare ed eseguire un test di carico.

Configurare i test di carico con informazioni riservate

In questa sezione, si apprenderà come passare informazioni riservate allo script del test di carico in Azure Load Testing. 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 inserirla direttamente nel codice dello script, è possibile salvarla in un archivio protetto 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. Per i test basati su JMeter, usare il valore del segreto nello script di test di Apache JMeter usando la GetSecret funzione personalizzata. Per i test basati su Locust, usare il valore segreto leggendo dalle variabili di ambiente.

Importante

È possibile usare la funzione personalizzata GetSecret solo quando si esegue lo script di test 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 di test.

È anche necessario concedere all'Azure Load Testing l'accesso al Key Vault di Azure per recuperare il valore del segreto.

Annotazioni

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 di segreti 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 si limita l'accesso all'Azure Key Vault tramite un firewall o una rete virtuale, seguire questi passaggi 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.

    L'identificatore del segreto è l'URI completo del segreto in Azure Key Vault. 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 del test di carico per ogni segreto a cui si fa riferimento nello script di test. Il nome del parametro deve corrispondere al nome del segreto usato nello script di test. 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:

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

      Screenshot che mostra dove aggiungere i dettagli del segreto a un test di carico nel portale di Azure.

    • 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 proprietà secrets. Per altre informazioni sulla sintassi, vedere 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:

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

      Screenshot che mostra come selezionare l'identità di riferimento dell'insieme di credenziali delle chiavi.

    • 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 proprietà keyVaultReferenceIdentity. Per altre informazioni sulla sintassi, vedere Informazioni di riferimento su YAML sulla configurazione di test.

Concedere l'accesso al tuo Azure Key Vault

Quando si archiviano i segreti o i certificati del test di carico in Azure Key Vault, la risorsa di test di carico usa un'identità gestita per accedere all'insieme di credenziali delle chiavi. Dopo aver configurato l'identità gestita, è necessario concedere all'identità gestita della risorsa 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 da Azure Key Vault:

  1. Nel portale di Azure passare alla risorsa di Azure Key Vault.

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

  2. Nel riquadro sinistro selezionare Criteridi accesso e quindi + Crea.

  3. Nella scheda Autorizzazioni, in Autorizzazioni segrete, selezionare Ottienie quindi Avanti.

    Annotazioni

    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, 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 di segreti associato. Ad esempio, è possibile usare i segreti del repository GitHub o le variabili segrete in Azure Pipelines.

Annotazioni

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 di segreti CI/CD e passarli al test di carico in CI/CD:

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

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

    Screenshot che mostra come aggiungere una variabile ad Azure Pipelines.

    In GitHub è possibile usare i segreti del repository GitHub .

    Screenshot che mostra come aggiungere un segreto del repository GitHub.

    Annotazioni

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

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

    Il seguente frammento di codice YAML 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 segreto deve coincidere con quello usato nello script di Apache JMeter.

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

Usare segreti nello script di test

Aggiornare quindi lo script di test per usare il segreto specificato in precedenza.

Per prima cosa, creare una variabile definita dall'utente che recupera il valore 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 personalizzata nel file JMX e assegnarvi il valore segreto usando la funzione personalizzata GetSecret.

    La funzione GetSecret(<my-secret-name>) accetta il nome del segreto come argomento. Si utilizza lo stesso nome 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 che mostra come aggiungere variabili definite dall'utente allo script Apache JMeter.

    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 variabile udv_appToken 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 funzione System.getenv.

    La funzione System.getenv("<my-variable-name>") accetta il nome della variabile di ambiente come argomento. Usi questo stesso nome quando configuri il test di carico.

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

    Screenshot che mostra come aggiungere variabili definite dall'utente per le variabili di ambiente allo script JMeter.

    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 variabile udv_webapp 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 di test, è 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 di test.

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 la variabile di ambiente Nome e Valore, quindi selezionare Applica.

    Screenshot che mostra come aggiungere una variabile di ambiente a un test di carico nel portale di Azure.

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 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 di test.

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 del segreto dell'insieme di credenziali delle chiavi, il servizio archivia solo l'URI del 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 sia nel flusso di lavoro CI/CD?

Se esiste un parametro sia nel file di configurazione YAML sia 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 tramite l'attività o l'azione di 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, si immette 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.