Поделиться через


Настройка нагрузочного теста в YAML

Узнайте, как настроить нагрузочный тест в Azure Load Testing с помощью YAML. Для создания и запуска нагрузочных тестов из рабочего процесса непрерывной интеграции и непрерывной доставки (CI/CD) используется файл конфигурации YAML.

Синтаксис YAML нагрузочного теста

Конфигурация нагрузочного теста использует следующие ключи:

Ключ Тип Обязательное поле Значение по умолчанию Description
version строка Y Версия спецификации нагрузочного теста. Единственным поддерживаемым значением является v0.1.
testId строка Y Уникальный идентификатор нагрузочного теста. Значение должно быть от 2 до 50 символов ([a-z0-9_]). Для существующего теста можно получить testId на странице сведений о тесте в портал Azure.
testName строка N Устарело. Уникальный идентификатор нагрузочного теста. Этот параметр заменяется testId. Вы по-прежнему можете выполнять существующие testName тесты с помощью поля.
displayName строка N Отображаемое имя теста. Это значение отображается в списке тестов в портал Azure. Если оно не указано, testId используется в качестве отображаемого имени.
description строка N Краткое описание теста. Значение имеет максимальную длину 100 символов.
testType строка Y Тип теста. Возможные значения:
  • URL: нагрузочный тест на основе URL-адресов
  • JMX: нагрузочный тест на основе JMeter
  • Locust: нагрузочный тест на основе Locust
testPlan строка Y Ссылка на файл плана тестирования.
  • Если testType: JMX: относительный путь к скрипту теста JMeter.
  • Если testType: Locust: относительный путь к скрипту тестирования Locust.
  • Если testType: URL: относительный путь к JSON-файлу запросов.
engineInstances integer Y Число экземпляров параллельного тестового модуля для выполнения тестового плана. Узнайте больше о настройке высокомасштабируемой нагрузки.
configurationFiles Массив строк N Список внешних файлов, необходимых для тестового скрипта. Например, CSV-файлы данных, изображения или любой другой файл данных.
Нагрузочное тестирование Azure отправляет все файлы в ту же папку, что и скрипт тестирования. В скрипте JMeter или скрипте Locust ссылаются только на внешние файлы, используя имя файла, и удалите все сведения о пути к файлу.
failureCriteria объект N Список критериев сбоя нагрузочного теста. Дополнительные сведения см. в разделе failureCriteria .
autoStop Строка или объект N Автоматически остановите нагрузочный тест, когда процент ошибок превышает значение.
Возможные значения:
- disable: не остановите нагрузочный тест автоматически.
- объект: дополнительные сведения см . в конфигурации автостопирования .
properties объект N
  • If testType: JMX: JMeter user property file references.
  • Если testType: Locust: ссылки на файл конфигурации Locust.
Дополнительные сведения см . в свойствах .
zipArtifacts Массив строк N Указывает список zip-артефактов. Для файлов, отличных от скриптов JMeter и свойств пользователя для тестов на основе JMeter, а также файлов скрипта и конфигурации Locust для тестов на основе Локуста, если размер файла превышает 50 МБ, сжать их в ZIP-файл. Убедитесь, что ZIP-файл остается ниже 50 МБ в размере. Допускается только 5 ZIP-артефактов с не более чем 1000 файлами в каждом и несжатом размере 1 ГБ. Применяется только для testType: JMX и testType: Locust.
splitAllCSVs boolean N False Разбиение входных CSV-файлов по всем экземплярам тестового модуля. Дополнительные сведения см. в статье "Чтение CSV-файла" в нагрузочных тестах.
secrets объект N Список секретов, на которые ссылается скрипт Apache JMeter или Locust. Дополнительные сведения см . в секретах .
env объект N Список переменных среды, на которые ссылается скрипт Apache JMeter или Locust. Дополнительные сведения см . в переменных среды.
certificates объект N Список сертификатов клиента для проверки подлинности с помощью конечных точек приложения в скрипте JMeter или Locust. Дополнительные сведения см . в сертификатах .
keyVaultReferenceIdentity строка N Идентификатор ресурса управляемого удостоверения, назначаемого пользователем, для доступа к секретам из Azure Key Vault. Если вы используете управляемое системой удостоверение, эти сведения не требуются. Обязательно предоставьте этому пользователю доступ к хранилищу ключей Azure. Дополнительные сведения об управляемых удостоверениях см. в службе "Нагрузочное тестирование Azure".
subnetId строка N Идентификатор ресурса подсети виртуальной сети для тестирования частных конечных точек. Эта подсеть размещает внедренные виртуальные машины модуль тестирования. Дополнительные сведения см. в статье о том, как нагрузить частные конечные точки, размещенные в частном режиме.
publicIPDisabled boolean N Отключите развертывание общедоступного IP-адреса, подсистемы балансировки нагрузки и группы безопасности сети при тестировании частной конечной точки. Дополнительные сведения см. в статье о том, как нагрузить частные конечные точки, размещенные в частном режиме.
regionalLoadTestConfig объект N Распределяйте нагрузку между регионами, чтобы имитировать трафик пользователей из нескольких регионов. Дополнительные сведения см . в конфигурации регионального нагрузочного теста.

Пример конфигурации нагрузочного теста

Следующий фрагмент кода YAML содержит пример конфигурации нагрузочного теста.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
subnetId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Network/virtualNetworks/load-testing-vnet/subnets/load-testing
configurationFiles:
  - 'sampledata.csv'
zipArtifacts:
   - bigdata.zip
splitAllCSVs: True
failureCriteria:
  - avg(response_time_ms) > 300
  - percentage(error) > 50
  - GetCustomerDetails: avg(latency) >200
autoStop:
  errorPercentage: 80
  timeWindow: 60
secrets:
  - name: my-secret
    value: https://akv-contoso.vault.azure.net/secrets/MySecret/abc1234567890def12345
keyVaultReferenceIdentity: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity

failureCriteriaКонфигурация

Критерии сбоя теста позволяют определить условия, чтобы определить, успешно ли выполнен нагрузочный тест. Если выполняется один или несколько критериев сбоя, тест получает результат теста с ошибкой. Дополнительные сведения об использовании критериев сбоя нагрузочного теста.

Можно определить критерии сбоя, которые применяются ко всему нагрузочному тесту или применяются к конкретному запросу. Критерии сбоя имеют следующую структуру:

  • Критерии тестирования на уровне нагрузочного теста: Aggregate_function (client_metric) condition threshold
  • Критерии тестирования, применяемые к определенным запросам JMeter: Request: Aggregate_function (client_metric) condition threshold

Поддерживаемые клиентские метрики

Нагрузочное тестирование Azure поддерживает следующие метрики клиента:

Метрика Агрегатная функция За пороговое значение Условие Description
response_time_ms avg (среднее)
min (минимум)
max (максимум)
pxx (процентиль), xx может быть 50, 75, 90, 95, 96, 97, 98, 99, 999 и 9999
Целочисленное значение, представляющее число миллисекунда (мс). > (больше чем);
< (меньше чем);
Время отклика или истекшее время в миллисекундах. Дополнительные сведения о истекаемом времени см. в документации по Apache JMeter.
latency avg (среднее)
min (минимум)
max (максимум)
pxx (процентиль), xx может быть 50, 90, 95, 99
Целочисленное значение, представляющее число миллисекунда (мс). > (больше чем);
< (меньше чем);
Задержка в миллисекундах. Дополнительные сведения о задержке см. в документации по Apache JMeter.
error percentage Числовое значение в диапазоне 0–100, представляющее процент. > (больше чем); Процент неудачных запросов.
requests_per_sec avg (среднее) Числовое значение с двумя десятичными разрядами. > (больше)
< (меньше чем);
Количество запросов в секунду.
requests count Целое значение. > (больше)
< (меньше чем);
Общее количество запросов.

Пример конфигурации условий сбоя

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая имеет три критерия сбоя нагрузочного теста.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
failureCriteria:
  - avg(response_time_ms) > 300
  - percentage(error) > 50
  - GetCustomerDetails: avg(latency) >200

autoStopКонфигурация

Функция автостопирования нагрузочного теста позволяет автоматически останавливать нагрузочный тест, когда процент ошибок превышает определенное пороговое значение в течение заданного периода времени. Дополнительные сведения о функции автостопирования нагрузочного теста.

Ключ Тип Default value Description
errorPercentage integer 90 Пороговое значение для процента ошибок во время timeWindow. Если процент ошибок превышает этот процент в течение любого заданного периода времени, тестовый запуск останавливается автоматически.
timeWindow integer 60 Время в секундах errorPercentageдля вычисления.

Пример конфигурации автостопок

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая имеет три критерия сбоя нагрузочного теста.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
autoStop:
  errorPercentage: 80
  timeWindow: 60

propertiesКонфигурация

Вы можете указать файл свойств пользователя JMeter для нагрузочного теста. Файл свойств пользователя передается вместе с планом тестирования и другими файлами. Дополнительные сведения об использовании свойств пользователя JMeter в Azure Load Testing.

Ключ Тип Default value Description
userPropertyFile строка Файл для использования в качестве файла свойств пользователя Apache JMeter или файла конфигурации Locust. Для Locust файлы с расширениями .conf, .ini и TOML поддерживаются в виде файла конфигурации. Файл передается в ресурс Azure Load Testing вместе со скриптом теста и другими файлами конфигурации. Если файл находится в подпапке на локальном компьютере, используйте путь относительно расположения тестового скрипта.

Пример конфигурации файла свойств пользователя

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

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
properties:
  userPropertyFile: 'user.properties'

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая задает файл конфигурации Locust.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.py
testType: Locust
engineInstances: 1
properties:
  userPropertyFile: 'locust.conf'

secretsКонфигурация

Вы можете хранить секретные значения в Azure Key Vault и ссылаться на них в тестовом плане. Дополнительные сведения об использовании секретов с azure Load Testing.

Ключ Тип Default value Description
name строка Имя секрета. Это имя должно соответствовать имени секрета, используемому в запросах тестового плана.
value строка URI (секретный идентификатор) для секрета Azure Key Vault.

Пример конфигурации секретов

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая ссылается на секрет my-secret в Azure Key Vault.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
secrets:
  - name: my-secret
    value: https://akv-contoso.vault.azure.net/secrets/MySecret/abc1234567890def12345

envКонфигурация

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

Ключ Тип Default value Description
name строка Имя переменной среды. Это имя должно совпадать с именем переменной, используемой в запросах тестового плана.
value строка Значение переменной среды.

Пример конфигурации переменной среды

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая указывает переменную my-variable среды и значение my-value.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
env:
  - name: my-variable
    value: my-value

certificatesКонфигурация

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

Ключ Тип Default value Description
name строка Имя сертификата.
value строка URI (секретный идентификатор) для сертификата в Azure Key Vault.

Пример конфигурации сертификата

В следующем фрагменте кода показана конфигурация нагрузочного теста, которая ссылается на сертификат клиента в Azure Key Vault.

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
certificates:
  - name: my-certificate
    value: https://akv-contoso.vault.azure.net/certificates/MyCertificate/abc1234567890def12345

Запросы JSON-файла

При использовании теста на основе URL-адресов можно указать HTTP-запросы в JSON-файле вместо использования скрипта тестирования JMeter. Обязательно установите testType URL значение в файле YAML конфигурации теста и составьте ссылку на JSON-файл.

HTTP-запросы;

В файле JSON запросов используются следующие свойства для определения запросов в свойстве requests :

Свойство Type Описание:
requestName строка Уникальное имя запроса. При настройке условий сбоя теста можно ссылаться на имя запроса.
responseVariables array Список переменных ответа. Используйте переменные ответа для извлечения значения из запроса и ссылки на него в последующем запросе. Дополнительные сведения о переменных ответа.
responseVariables.extractorType строка Механизм извлечения значения из выходных данных ответа. Поддерживаются значения XPathExtractor, JSONExtractor и RegularExpression.
responseVariables.expression строка Выражение для получения выходных данных ответа. Выражение зависит от значения типа извлекателя.
responseVariables.variableName строка Уникальное имя переменной ответа. Вы можете ссылаться на эту переменную в последующем запросе с помощью синтаксиса {$variable-name} .
queryParameters array Список параметров строки запроса для передачи в конечную точку.
queryParameters.key строка Имя параметра строки запроса.
queryParameters.value строка Значение параметра строки запроса.
requestType строка тип запроса; Поддерживаемые значения: URL или CURL.
endpoint строка URL-адрес конечной точки приложения для тестирования.
headers array Список заголовков HTTP для передачи в конечную точку приложения. Укажите пару "ключ-значение" для каждого заголовка.
body строка Текст http-запроса. Можно использовать для requestBodyFormat указания формата содержимого текста.
requestBodyFormat строка Формат содержимого текста. Поддерживаемые значения: Text, , JavaScriptJSON, HTMLи XML.
method строка Метод HTTP для вызова конечной точки. Поддерживаемые значения: GET, POST, , DELETEPUT, PATCH, HEADи OPTIONS.
curlCommand строка Команда cURL для выполнения. Требует, чтобы он requestType был CURL.

Следующий фрагмент JSON содержит пример запроса JSON-файла:

{
    "version": "1.0",
    "scenarios": {
        "requestGroup1": {
            "requests": [
                {
                    "requestName": "add",
                    "responseVariables": [],
                    "queryParameters": [
                        {
                            "key": "param1",
                            "value": "value1"
                        }
                    ],
                    "requestType": "URL",
                    "endpoint": "https://www.contoso.com/orders",
                    "headers": {
                        "api-token": "my-token"
                    },
                    "body": "{\r\n  \"customer\": \"Contoso\",\r\n  \"items\": {\r\n\t  \"product_id\": 321,\r\n\t  \"count\": 50,\r\n\t  \"amount\": 245.95\r\n  }\r\n}",
                    "method": "POST",
                    "requestBodyFormat": "JSON"
                },
                {
                    "requestName": "get",
                    "responseVariables": [],
                    "requestType": "CURL",
                    "curlCommand": "curl --request GET 'https://www.contoso.com/orders'"
                },
            ],
            "csvDataSetConfigList": []
        }
    },
    "testSetup": [
        {
            "virtualUsersPerEngine": 1,
            "durationInSeconds": 600,
            "loadType": "Linear",
            "scenario": "requestGroup1",
            "rampUpTimeInSeconds": 30
        }
    ]
}

Конфигурация загрузки

В файле JSON запросов используются следующие свойства для определения конфигурации загрузки в свойстве testSetup :

Свойство Тип Тип загрузки Description
loadType строка Тип шаблона загрузки. Поддерживаемые значения: linear, stepи spike.
scenario строка Ссылка на группу запросов, указанную в свойстве scenarios .
virtualUsersPerEngine integer Все Количество виртуальных пользователей на экземпляр подсистемы тестирования.
durationInSeconds integer Все Общая длительность нагрузочного теста в секундах.
rampUpTimeInSeconds integer Линейный, шаг Длительность в секундах для увеличения целевого числа виртуальных пользователей.
rampUpSteps integer Этап Количество шагов для достижения целевого числа виртуальных пользователей.
spikeMultiplier integer Пик Фактор умножения числа целевых пользователей с периодом пикового периода.
spikeHoldTimeInSeconds integer Пик Общая длительность в секундах для поддержания пиковой нагрузки.

Конфигурация регионального нагрузочного теста

Вы можете распределять нагрузку между регионами, чтобы лучше имитировать шаблоны трафика в реальной жизни. Можно указать регионы, из которых нужно создать нагрузку, и объем нагрузки, которую вы хотите имитировать из каждого региона. Это можно сделать, указав имя региона и количество экземпляров подсистемы, которые требуется в этом регионе. Дополнительные сведения о создании нагрузки из нескольких регионов.

Ключ Тип Default value Description
region строка Имя региона Azure.
engineInstances integer Количество экземпляров подсистемы для этого региона Azure.

Пример конфигурации регионального нагрузочного теста

В следующем фрагменте кода показана конфигурация нагрузочного теста, указывающая два региона eastus Azure и eastasia количество экземпляров подсистемы для каждого региона.

displayName: Sample Test
testPlan: sampleScript.jmx
description: 'Load test website home page'
engineInstances: 4
testId: SampleTest
testType: Locust
splitAllCSVs: False
regionalLoadTestConfig:
- region: eastus
  engineInstances: 2
- region: eastasia
  engineInstances: 2
failureCriteria:
- p90(response_time_ms) > 10000
autoStop:
  errorPercentage: 90
  timeWindow: 60