Configurer des secrets et des variables d’environnement

Effectué

Découvrez comment passer des secrets et des environnements en tant que paramètres à un test de charge dans Azure Load Testing. Vous pouvez utiliser des paramètres pour modifier le comportement d’un test de charge sans avoir à modifier le script Apache JMeter. Par exemple, pour tester une application web, spécifiez l’URL du point de terminaison en tant que paramètre pour réutiliser votre script de test dans plusieurs environnements. Vous pouvez également utiliser des paramètres pour éviter d’avoir à coder en dur des informations sensibles dans le script de test JMeter.

Le service Azure Load Testing prend en charge deux types de paramètres :

  • Secrets : contiennent des informations sensibles et sont transmises en toute sécurité au moteur de test de charge. Par exemple, les secrets fournissent des informations d’identification de service web au lieu de les coder en dur dans le script de test.

  • Variables d’environnement : contiennent des informations non sensibles et sont disponibles en tant que variables d’environnement dans le moteur de test de charge. Par exemple, les variables d’environnement rendent l’URL du point de terminaison d’application configurable.

Vous pouvez spécifier des paramètres dans la configuration de test de charge lorsque vous créez un test ou mettez à jour un test existant. Si vous exécutez un test de charge dans votre flux de travail CI/CD, vous définissez des paramètres dans le fichier de configuration de test de charge ou dans la définition de flux de travail CI/CD.

Configurer des tests de charge avec des secrets

Dans cette section, vous allez apprendre à transmettre des secrets à votre script de test de charge dans Azure Load Testing. Par exemple, vous pouvez utiliser un secret pour passer la clé API à un point de terminaison de service web que vous testez. Au lieu de stocker la clé API dans la configuration ou de le coder en dur dans le script, vous pouvez l’enregistrer dans un magasin de secrets pour contrôler étroitement l’accès au secret.

Le test de charge Azure vous permet de stocker des secrets dans Azure Key Vault. Sinon, lorsque vous exécutez votre test de charge dans un pipeline CI/CD, vous pouvez également utiliser le magasin de secrets associé à votre technologie CI/CD, comme Azure Pipelines ou GitHub Actions.

Pour utiliser des secrets avec Azure Load Testing, procédez comme suit :

  1. Stocker la valeur secrète dans le magasin de secrets
  2. Transmettez une référence au secret dans le script de test Apache JMeter.
  3. Utilisez la valeur secrète dans le script de test Apache JMeter à l’aide de la fonction personnalisée GetSecret.

Important

Vous pouvez uniquement utiliser la fonction personnalisée GetSecret lorsque vous exécutez votre script de test JMeter avec Azure Load Testing. Si vous exécutez votre script de test localement, vous devez mettre à jour votre script de test et lire des valeurs secrètes de manière différente.

Utiliser le magasin de secrets GitHub pour enregistrer les secrets de test de charge

Pour utiliser des secrets dans le magasin de secrets CI/CD et les transmettre à votre test de charge dans CI/CD :

  1. Ajoutez la valeur secrète au magasin de secrets GitHub Actions.

    Dans GitHub, vous pouvez utiliser des secrets de dépôt GitHub.

    Capture d’écran montrant comment ajouter un secret de dépôt GitHub.

  2. Transmettez le secret en tant que paramètre d’entrée à la tâche/action Test de charge dans le flux de travail CI/CD.

    L’extrait de code YAML suivant montre comment passer le secret à l’action GitHub de test de charge :

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

    Important

    Le nom du paramètre d’entrée secrète doit correspondre au nom utilisé dans le script Apache JMeter.

Vous avez spécifié un secret dans le gestionnaire de secrets CI/CD et passé une référence à Azure Load Testing. Vous pouvez maintenant utiliser le secret dans le script Apache JMeter.

Utiliser des secrets dans Apache JMeter

Ensuite, vous mettez à jour le script Apache JMeter pour utiliser le secret que vous avez spécifié précédemment.

Vous créez d’abord une variable définie par l’utilisateur qui récupère la valeur secrète. Vous pouvez ensuite utiliser cette variable dans votre test. Par exemple, pour passer un jeton d’API dans un en-tête de requête HTTP.

  1. Créez une variable définie par l’utilisateur dans votre fichier JMX et attribuez-lui la valeur secrète à l’aide de la fonction personnalisée GetSecret.

    La fonction GetSecret(<my-secret-name>) prend le nom du secret en tant qu’argument. Vous utilisez ce même nom lorsque vous configurez le test de charge dans une étape ultérieure.

    Vous pouvez créer la variable définie par l’utilisateur à l’aide de l’IDE Apache JMeter, comme illustré dans l’image suivante :

    Capture d’écran montrant comment ajouter des variables définies par l’utilisateur à votre script Apache JMeter.

    Vous pouvez également modifier directement le fichier JMX, comme illustré dans cet exemple d’extrait de code :

    <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. Référencez la variable définie par l’utilisateur dans le script de test.

    Vous pouvez utiliser la syntaxe ${} pour référencer la variable dans le script. Dans l’exemple suivant, vous utilisez la variable udv_appToken pour définir un en-tête 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>
    

Configurer des tests de charge avec des variables d’environnement

Dans cette section, vous utilisez des variables d’environnement pour passer des paramètres à votre test de charge.

  1. Mettez à jour le script Apache JMeter pour utiliser la variable d’environnement. Par exemple, pour configurer le nom d’hôte du point de terminaison d’application.

  2. Configurez le test de charge et transmettez la variable d’environnement au script de test.

Utiliser des variables d’environnement dans Apache JMeter

Dans cette section, vous mettez à jour le script Apache JMeter pour utiliser des variables d’environnement pour contrôler le comportement du script.

Vous définissez d’abord une variable définie par l’utilisateur qui lit la variable d’environnement, puis vous pouvez utiliser cette variable dans l’exécution du test. Par exemple, pour mettre à jour le domaine HTTP.

  1. Créez une variable définie par l’utilisateur dans votre fichier JMX et affectez-lui la valeur de la variable d’environnement à l’aide de la fonction System.getenv.

    La fonction System.getenv("<my-variable-name>") prend le nom de la variable d’environnement comme argument. Vous utilisez ce même nom lorsque vous configurez le test de charge.

    Vous pouvez créer une variable définie par l’utilisateur à l’aide de l’IDE Apache JMeter, comme illustré dans l’image suivante :

    Capture d’écran montrant comment ajouter des variables définies par l’utilisateur pour les variables d’environnement à votre script JMeter.

    Vous pouvez également modifier directement le fichier JMX, comme illustré dans cet exemple d’extrait de code :

    <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. Référencez la variable définie par l’utilisateur dans le script de test.

    Vous pouvez utiliser la syntaxe ${} pour référencer la variable dans le script. Dans l’exemple suivant, vous utilisez la variable udv_webapp pour configurer l’URL du point de terminaison d’application.

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

Configurer des variables d’environnement dans azure Load Testing

Pour passer des variables d’environnement au script Apache JMeter, vous pouvez configurer le test de charge dans le portail Azure, dans le fichier de configuration du test YAML ou directement dans le flux de travail CI/CD.

L’extrait de code YAML suivant montre un exemple 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"
        }
    ]