Использование секретов и переменных среды в Нагрузочном тестировании Azure

Из этой статьи вы узнаете, как передавать секреты и среды в качестве параметров нагрузочного теста в Azure Load Testing. Параметры можно использовать для изменения поведения нагрузочного теста, не изменяя скрипт Apache JMeter. Например, чтобы протестировать веб-приложение, укажите URL-адрес конечной точки в качестве параметра для повторного использования тестового скрипта в нескольких средах. Кроме того, можно использовать параметры, чтобы избежать того, что в скрипте тестирования JMeter необходимо использовать конфиденциальные сведения о жестком коде.

Служба нагрузочного тестирования Azure поддерживает два типа параметров:

  • Секреты: содержат конфиденциальную информацию и безопасно передаются подсистеме нагрузочных тестов. Например, секреты предоставляют учетные данные веб-службы вместо жесткого написания кода в тестовом скрипте. Дополнительные сведения см. в разделе "Настройка нагрузочных тестов с секретами".

  • Переменные среды: содержат не конфиденциальную информацию и доступны в качестве переменных среды в подсистеме нагрузочных тестов. Например, переменные среды делают URL-адрес конечной точки приложения настраиваемым. Дополнительные сведения см. в разделе "Настройка нагрузочных тестов с переменными среды".

Параметры можно указать в конфигурации нагрузочного теста при создании нового теста или обновлении существующего теста. Если вы запускаете нагрузочный тест в рабочем процессе CI/CD, определите параметры в файле конфигурации нагрузочного теста или в определении рабочего процесса CI/CD.

Необходимые компоненты

Настройка нагрузочных тестов с секретами

В этом разделе описано, как передать секреты в скрипт нагрузочного теста в Azure Load Testing. Например, можно использовать секрет для передачи ключа API в конечную точку веб-службы, которую выполняется нагрузочное тестирование. Вместо хранения ключа API в конфигурации или жестком кодировании в скрипте его можно сохранить в секретном хранилище, чтобы жестко контролировать доступ к секрету.

Нагрузочное тестирование Azure позволяет хранить секреты в Azure Key Vault. Кроме того, при запуске нагрузочного теста в конвейере CI/CD можно также использовать хранилище секретов, связанное с технологией CI/CD, например Azure Pipelines или GitHub Actions.

Чтобы использовать секреты с нагрузочного тестирования Azure, выполните следующие действия.

  1. Сохраните значение секрета в хранилище секретов (Azure Key Vault или хранилище секретов CI/CD).
  2. Передайте ссылку на секрет в скрипт тестирования Apache JMeter.
  3. Используйте значение секрета в скрипте тестирования Apache JMeter с помощью пользовательской GetSecret функции.

Важно!

Пользовательскую функцию можно использовать GetSecret только при запуске скрипта тестирования JMeter с помощью нагрузочного тестирования Azure. При локальном запуске скрипта тестирования необходимо обновить скрипт теста и считывать значения секретов по-другому.

Использование Azure Key Vault для хранения секретов нагрузочного теста

Azure Key Vault можно использовать для передачи секретных значений в скрипт тестирования в Azure Load Testing. Вы добавите ссылку на секрет в конфигурации нагрузочного тестирования Azure. Затем нагрузочное тестирование Azure использует эту ссылку для получения значения секрета в скрипте Apache JMeter.

Кроме того, необходимо предоставить Azure Load Testing доступ к хранилищу ключей Azure, чтобы получить значение секрета.

Примечание.

Если вы запускаете нагрузочный тест в рамках процесса CI/CD, вы также можете использовать связанное хранилище секретов. Перейдите к использованию хранилища секретов CI/CD.

Создание секрета в Azure Key Vault

  1. Добавьте значение секрета в хранилище ключей, если вы еще этого не сделали.

    Важно!

    Если доступ к хранилищу ключей Azure ограничен брандмауэром или виртуальной сетью, выполните следующие действия, чтобы предоставить доступ к доверенным службам Azure.

  2. Получите идентификатор секрета хранилища ключей для секрета. Этот секретный идентификатор используется для настройки нагрузочного теста.

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

    Идентификатор секрета — это полный URI секрета в хранилище ключей Azure. При необходимости можно также включить номер версии. Например, https://myvault.vault.azure.net/secrets/mysecret/ или https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678.

Добавление секрета в нагрузочный тест

  1. Ссылка на секрет в конфигурации нагрузочного теста.

    Вы определяете параметр секрета нагрузочного теста для каждого секрета, на который вы ссылаетесь в скрипте Apache JMeter. Имя параметра должно соответствовать имени секрета, используемому в скрипте тестирования Apache JMeter. Значение параметра — это идентификатор безопасности хранилища ключей.

    Можно указать параметры секрета, выполнив одно из следующих действий:

    • В портал Azure выберите нагрузочный тест, выберите "Настроить", перейдите на вкладку "Параметры", а затем введите сведения о параметрах.

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

    • Если вы настраиваете рабочий процесс CI/CD и используете Azure Key Vault, вы можете указать секрет в файле конфигурации YAML с помощью secrets свойства. Дополнительные сведения о синтаксисе см. в справочнике по YAML конфигурации тестов.

  2. Укажите удостоверение, которое Azure Load Testing использует для доступа к секретам в Azure Key Vault.

    Удостоверение может быть назначаемым системой удостоверением ресурса нагрузочного тестирования или одним из назначаемых пользователем удостоверений. Убедитесь, что вы используете то же удостоверение, к которому вы предоставили доступ ранее.

    Вы можете указать удостоверение ссылки на хранилище ключей, выполнив одно из следующих действий.

    • В портал Azure выберите нагрузочный тест, выберите "Настроить", перейдите на вкладку "Параметры", а затем настройте удостоверение ссылки Key Vault.

      Screenshot that shows how to select key vault reference identity.

    • Если вы настраиваете рабочий процесс CI/CD и используете Azure Key Vault, можно указать эталонное удостоверение в файле конфигурации YAML с помощью keyVaultReferenceIdentity свойства. Дополнительные сведения о синтаксисе см. в справочнике по YAML конфигурации тестов.

Предоставление доступа к хранилищу ключей Azure

При хранении секретов или сертификатов нагрузочного теста в Azure Key Vault ресурс нагрузочного тестирования использует управляемое удостоверение для доступа к хранилищу ключей. После настройки удостоверения управления необходимо предоставить управляемое удостоверение ресурса нагрузочного тестирования для чтения этих значений из хранилища ключей.

Чтобы предоставить ресурсу нагрузочного тестирования Azure разрешения на чтение секретов или сертификатов из хранилища ключей Azure:

  1. В портал Azure перейдите к ресурсу хранилища ключей Azure.

    Если у вас нет хранилища ключей, следуйте инструкциям в кратком руководстве по созданию хранилища ключей Azure.

  2. На левой панели выберите "Политики доступа" и нажмите кнопку "Создать".

  3. На вкладке "Разрешения" в разделе "Разрешения секрета" выберите "Получить" и нажмите кнопку "Далее".

    Примечание.

    Нагрузочное тестирование Azure извлекает сертификаты в качестве секрета , чтобы обеспечить доступность закрытого ключа сертификата.

  4. На вкладке "Субъект" найдите и выберите управляемое удостоверение для ресурса нагрузочного тестирования, а затем нажмите кнопку "Далее".

    Если вы используете управляемое удостоверение, назначаемое системой, имя управляемого удостоверения совпадает с именем ресурса нагрузочного тестирования Azure.

  5. Снова выберите Далее.

    При выполнении теста управляемое удостоверение, связанное с ресурсом нагрузочного тестирования, теперь может считывать секреты или сертификаты для нагрузочного теста из хранилища ключей.

Теперь, когда вы добавили секрет в Azure Key Vault, настроили секрет для нагрузочного теста, теперь можно перейти к использованию секретов в Apache JMeter.

Использование хранилища секретов CI/CD для сохранения секретов нагрузочного теста

Если вы используете нагрузочное тестирование Azure в рабочем процессе CI/CD, вы также можете использовать связанное хранилище секретов. Например, можно использовать секреты репозитория GitHub или секретные переменные в Azure Pipelines.

Примечание.

Если вы уже используете хранилище ключей, вы также можете использовать его для хранения секретов нагрузочного теста. Перейдите к использованию Azure Key Vault.

Чтобы использовать секреты в хранилище секретов CI/CD и передать их в нагрузочный тест в CI/CD:

  1. Добавьте значение секрета в хранилище секретов CI/CD, если оно еще не существует.

    В Azure Pipelines можно изменить конвейер и добавить переменную.

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

    В GitHub можно использовать секреты репозитория GitHub.

    Screenshot that shows how to add a GitHub repository secret.

    Примечание.

    Не забудьте использовать фактическое значение секрета, а не идентификатор секрета хранилища ключей в качестве значения.

  2. Передайте секрет в качестве входного параметра в задачу или действие нагрузочного тестирования в рабочем процессе CI/CD.

    В следующем фрагменте кода YAML показано, как передать секрет в действие GitHub нагрузочного тестирования:

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

    В следующем фрагменте КОДА YAML показано, как передать секрет задаче Azure Pipelines:

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

    Важно!

    Имя входного параметра секрета должно соответствовать имени, используемому в скрипте Apache JMeter.

Теперь вы указали секрет в хранилище секретов CI/CD и передали ссылку на нагрузочное тестирование Azure. Теперь вы можете использовать секрет в скрипте Apache JMeter.

Использование секретов в Apache JMeter

Затем вы обновите скрипт Apache JMeter, чтобы использовать секрет, указанный ранее.

Сначала создается определяемая пользователем переменная, которая извлекает значение секрета. Затем эту переменную можно использовать в тесте (например, для передачи маркера API в заголовке HTTP-запроса).

  1. Создайте определяемую пользователем переменную в файле JMX и назначьте ему значение секрета с помощью пользовательской GetSecret функции.

    Функция GetSecret(<my-secret-name>) принимает имя секрета в качестве аргумента. Это же имя используется при настройке нагрузочного теста на более поздних шагах.

    Вы можете создать определяемую пользователем переменную с помощью интегрированной среды разработки Apache JMeter, как показано на следующем рисунке:

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

    Кроме того, можно напрямую изменить JMX-файл, как показано в следующем фрагменте кода:

    <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. Ссылка на определяемую пользователем переменную в скрипте теста.

    Для ссылки на переменную в скрипте можно использовать ${} синтаксис. В следующем примере используется udv_appToken переменная для задания заголовка 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>
    

Настройка нагрузочных тестов с переменными среды

В этом разделе вы используете переменные среды для передачи параметров в нагрузочный тест.

  1. Обновите скрипт Apache JMeter, чтобы использовать переменную среды (например, чтобы настроить имя узла конечной точки приложения).

  2. Настройте нагрузочный тест и передайте переменную среды в скрипт тестирования.

Использование переменных среды в Apache JMeter

В этом разделе описано, как обновить скрипт Apache JMeter, чтобы использовать переменные среды для управления поведением скрипта.

Сначала необходимо определить определяемую пользователем переменную, которая считывает переменную среды, а затем использовать эту переменную в тестовом выполнении (например, для обновления домена HTTP).

  1. Создайте определяемую пользователем переменную в JMX-файле и назначьте ей значение переменной среды с помощью System.getenv функции.

    Функция System.getenv("<my-variable-name>") принимает имя переменной среды в качестве аргумента. Это же имя используется при настройке нагрузочного теста.

    Вы можете создать определяемую пользователем переменную с помощью интегрированной среды разработки Apache JMeter, как показано на следующем рисунке:

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

    Кроме того, можно напрямую изменить JMX-файл, как показано в следующем фрагменте кода:

    <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. Ссылка на определяемую пользователем переменную в скрипте теста.

    Для ссылки на переменную в скрипте можно использовать ${} синтаксис. В следующем примере используется udv_webapp переменная для настройки URL-адреса конечной точки приложения.

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

Настройка переменных среды в Нагрузочном тестировании Azure

Чтобы передать переменные среды в скрипт Apache JMeter, можно настроить нагрузочный тест в портал Azure в файле конфигурации YAML или непосредственно в рабочем процессе CI/CD.

Важно!

При определении переменной среды для нагрузочного теста его имя должно соответствовать имени переменной, используемой в скрипте Apache JMeter.

Чтобы указать переменную среды для нагрузочного теста с помощью портал Azure, сделайте следующее:

  1. На странице конфигурации теста выберите вкладку "Параметры ".

  2. В разделе "Переменные среды" введите имя и значение переменной среды, а затем нажмите кнопку "Применить".

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

При запуске нагрузочного теста в рабочем процессе CI/CD можно определить переменные среды в файле конфигурации тестов YAML. Дополнительные сведения о синтаксисе см. в справочнике по YAML конфигурации тестов.

Кроме того, можно напрямую указать переменные среды в определении рабочего процесса CI/CD. Входные параметры используются для действия Azure Load Testing или задачи Azure Pipelines для передачи переменных среды в скрипт Apache JMeter.

В следующем фрагменте кода YAML показан пример 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"
        }
    ]

В следующем фрагменте кода YAML показан пример Azure Pipelines:

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

Вопросы и ответы

Хранит ли служба Azure Load Testing мои секретные значения?

№ Служба Azure Load Testing не сохраняет значения секретов. При использовании URI секрета хранилища ключей служба сохраняет только URI секрета и получает значение секрета для каждого тестового запуска. Если вы предоставляете значение секретов в рабочем процессе CI/CD, значения секретов недоступны после тестового запуска. Эти значения предоставляются для каждого тестового запуска.

Что произойдет, если у меня есть параметры в файле конфигурации YAML и рабочем процессе CI/CD?

Если параметр существует как в файле конфигурации YAML, так и в действии нагрузочного тестирования Azure или задаче Azure Pipelines, значение рабочего процесса CI/CD используется для тестового запуска.

Я создал и выполнил тест из рабочего процесса CI/CD, передав параметры с помощью задачи или действия Azure Load Testing. Можно ли запустить этот тест из портал Azure с теми же параметрами?

Значения параметров не сохраняются при передаче из рабочего процесса CI/CD. При выполнении теста из портал Azure необходимо снова указать значения параметров. Появится запрос на ввод отсутствующих значений. Для значений секретов введите универсальный код ресурса (URI) секрета хранилища ключей. Значения, которые вы вводите на странице тестового запуска или повторного запуска, допустимы только для этого тестового запуска. Чтобы внести изменения на уровне теста, перейдите к разделу "Настройка теста " и введите значения параметров.