Configurer des secrets et des variables d’environnement
Découvrez comment passer des secrets et des variables d’environnement en tant que paramètres à un test de charge dans Test de charge Azure. Vous pouvez utiliser des paramètres pour modifier le comportement d’un test de charge sans avoir à modifier le script Apache JMeter ou Locust. Par exemple, vous pouvez spécifier 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 les informations sensibles en codage dur dans le script de test.
Note
Les exemples de cette unité utilisent les fonctionnalités actuelles de paramétrage d’Test de charge Azure et les principales versions prises en charge de GitHub Actions au moment de la rédaction. Le service et les actions sont souvent mis à jour. Passez donc en revue la documentation des paramètres et les référentiels d’actions pour obtenir les informations les plus récentes.
Le service Test de charge Azure prend en charge deux types de paramètres :
Secrets: Contiennent des informations sensibles qu’Test de charge Azure transmet en toute sécurité au moteur de test. Par exemple, les secrets fournissent des informations d’identification de service web au lieu de valeurs codées en dur dans le script de test.
Variables d’environnement : Contiennent des informations non sensibles exposées par le moteur de test au script de test. 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.
Authentifier le flux de travail GitHub Actions
L’action Test de charge Azure nécessite une session de Azure authentifiée. Pour un exécuteur hébergé par GitHub, vous pouvez configurer des informations d’identification d’identité fédérées et attribuer l’identité au rôle Contributeur de test de charge au niveau de l’étendue de ressource Test de charge Azure.
Le flux de travail utilise OpenID Connect avec l’autorisation id-token: write et les secrets du dépôt pour les identifiants du client, du locataire et de l’abonnement. L’exemple suivant établit la session Azure sans stocker de secret client.
on: [push]
permissions:
id-token: write
contents: read
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v7
- name: Sign in to Azure
uses: azure/login@v3
with:
client-id: '${{ secrets.AZURE_CLIENT_ID }}'
tenant-id: '${{ secrets.AZURE_TENANT_ID }}'
subscription-id: '${{ secrets.AZURE_SUBSCRIPTION_ID }}'
Configurer des tests de charge avec des secrets
Les secrets conservent les clés d’API, les mots de passe et d’autres valeurs sensibles hors de vos scripts de test. Test de charge Azure peut récupérer des valeurs d’Azure Key Vault ou les recevoir depuis un magasin de secrets CI/CD. Le processus suivant transmet un secret stocké à un script JMeter ou Locust.
- Vous pouvez stocker la valeur secrète dans Azure Key Vault ou votre magasin de secrets CI/CD.
- Vous pouvez transmettre une référence au secret dans le script de test.
- Pour les tests JMeter, vous pouvez récupérer le secret avec la
GetSecretfonction personnalisée. Pour les tests basés sur Locust, vous pouvez récupérer le secret à partir d’une variable d’environnement.
Important
Vous pouvez uniquement utiliser la fonction personnalisée GetSecret lorsque vous exécutez votre script de test JMeter avec Test de charge Azure. 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
Les secrets d’un dépôt GitHub permettent de stocker de manière chiffrée les valeurs utilisées par un workflow. Les étapes suivantes permettent de transmettre un secret du dépôt à Test de charge Azure sans stocker sa valeur dans la gestion de code source.
Vous pouvez ajouter la valeur secrète dans les secrets du dépôt GitHub.
Dans GitHub, vous pouvez utiliser des secrets de dépôt GitHub.
Vous pouvez transmettre le secret en tant que paramètre d’entrée à l’action Test de charge Azure 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 :
# Code fragment - focus on passing a repository secret. - 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 dans le script JMeter ou Locust.
Après avoir spécifié un secret dans le magasin de secrets CI/CD, Test de charge Azure transmet sa valeur au script JMeter ou Locust.
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.
Vous pouvez créer une variable définie par l’utilisateur dans votre fichier JMX et lui attribuer la valeur secrète à l’aide de la
GetSecretfonction personnalisée.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 :
Vous pouvez également modifier directement le fichier JMX, comme illustré dans cet exemple d’extrait de code :
<!-- Code fragment - focus on retrieving a secret. --> <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>Vous pouvez référencer 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 variableudv_appTokenpour définir un en-tête HTTP.<!-- Code fragment - focus on adding the secret to a request header. --> <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>
Utiliser des secrets dans Locust
Test de charge Azure expose un secret transmis à partir du magasin de secrets GitHub Actions en tant que variable d’environnement sur le moteur de test Locust. Vous pouvez récupérer la valeur en utilisant le même nom que celui que vous avez spécifié dans l’entrée d’action. Le fragment suivant récupère la appToken valeur.
# Code fragment - focus on reading the secret.
import os
app_token = os.getenv("appToken")
Configurer des tests de charge avec des variables d’environnement
Dans cette section, vous utilisez des variables d’environnement pour passer des paramètres non sensibles à votre test de charge. Les scripts JMeter et Locust accèdent aux valeurs via leurs API d’environnement respectives.
Vous pouvez mettre à jour le script Apache JMeter pour utiliser la variable d’environnement. Par exemple, vous pouvez configurer le nom d’hôte du point de terminaison d’application.
Vous pouvez configurer le test de charge et passer 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.
Vous pouvez créer une variable définie par l’utilisateur dans votre fichier JMX et lui attribuer la valeur de la variable d’environnement à l’aide de la
System.getenvfonction.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 :
Vous pouvez également modifier directement le fichier JMX, comme illustré dans cet exemple d’extrait de code :
<!-- Code fragment - focus on reading an environment variable. --> <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>Vous pouvez référencer 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 variableudv_webapppour configurer l’URL du point de terminaison d’application.<!-- Code fragment - focus on using the environment variable. --> <stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
Utiliser des variables d’environnement dans Locust
Un script Locust peut lire des variables d'environnement à l'aide de la fonction de os.getenv Python. Le nom de la variable doit correspondre au nom indiqué dans la configuration du test de charge ou dans les paramètres d’entrée de GitHub Actions. Le fragment suivant lit la valeur du webapp point de terminaison.
# Code fragment - focus on reading an environment variable.
import os
web_app = os.getenv("webapp")
Configurer des variables d’environnement dans azure Load Testing
Pour passer des variables d’environnement à un script JMeter ou Locust, 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 :
# Code fragment - focus on passing an environment variable.
- name: 'Azure Load Testing'
uses: azure/load-testing@v1
with:
loadtestConfigFile: 'SampleApp.yaml'
loadtestResource: 'MyTest'
resourceGroup: 'loadtests-rg'
env: |
[
{
"name": "webapp",
"value": "myapplication.contoso.com"
}
]