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


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

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

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

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

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

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

Следующий фрагмент кода 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'
  - 'testfragment.jmx'
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
  • Критерии тестирования, применяемые к определенным запросам: Request: Aggregate_function (client_metric) condition threshold

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

Единица измерения Агрегатная функция Порог Состояние Описание
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 Целое значение. > (больше чем)
< (меньше)
Общее количество запросов.

Метрики на стороне сервера

Вы можете определить критерии сбоя на метриках на стороне сервера для компонентов приложения на стороне сервера.

В следующей serverMetrics: таблице описаны различные поля в конфигурации:

Параметр Описание
resourceId Обязательное. Идентификатор ресурса компонента приложения, к которому должны применяться критерии.
metricNamespace Обязательное. Пространство имен метрик на стороне сервера.
metricName Обязательное. Метрики на стороне сервера, к которым должны применяться критерии.
aggregation Обязательное. Агрегирование, применяемое к метрикам на стороне сервера.
condition Необязательно. Оператор сравнения, например greater than, или less than.
value Обязательное. Числовое значение для сравнения с метрикой.

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

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

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
failureCriteria:
  clientMetrics:
    - avg(responseTimeMs) > 300
    - percentage(error) > 50
    - getCustomerDetails: avg(latency) > 200
  serverMetrics:
    - resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
      metricNamespace: Microsoft.Compute/virtualMachines
      metricName: Percentage CPU
      aggregation: Average
      condition: GreaterThan
      value: 80
    - resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
      metricNamespace: Microsoft.Compute/virtualMachines
      metricName: Available Memory
      aggregation: Average
      condition: LessThan
      value: 20

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

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

В следующей appComponents: таблице описаны различные поля в конфигурации:

Параметр Описание
resourceId Обязательное. Идентификатор ресурса компонента приложения, к которому должны применяться критерии.
resourceName Необязательно. Имя отслеживаемого ресурса.
kind Необязательно. Тип отслеживаемого ресурса.
metrics Обязательное. Список метрик для компонента приложения. Это содержит имя, пространство имен и агрегирование для метрики.

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

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

version: v0.1
testId: SampleTest
displayName: Sample Test
description: Load test website home page
testPlan: SampleTest.jmx
testType: JMX
engineInstances: 1
appComponents:
  - resourceId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appComponentResource"
    resourceName: appComponentResource #Optional
    kind: web # Optional
    metrics:
      - name: "requests/duration"
        namespace: microsoft.insights/components 
        aggregation: "Average"
      - name: "requests/count"
        aggregation: "Total"
        namespace: microsoft.insights/components   
  - resourceId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appComponentResource"
    resourceName: appComponentResource #Optional
    kind: web # Optional
    metrics:
      - name: "requests/duration"
        aggregation: "Average"
        namespace: microsoft.insights/components
      - name: "requests/count"
        aggregation: "Total"
        namespace: microsoft.insights/components

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

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

Ключ Тип Значение по умолчанию Описание
errorPercentage целое число девяносто Пороговое значение для процента ошибок во время timeWindow. Если процент ошибок превышает этот процент в течение любого заданного периода времени, тестовый запуск останавливается автоматически.
timeWindow целое число шестьдесят Время в секундах 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.

Ключ Тип Значение по умолчанию Описание
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.

Ключ Тип Значение по умолчанию Описание
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.

Ключ Тип Значение по умолчанию Описание
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.

Ключ Тип Значение по умолчанию Описание
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

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

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

В следующей referenceIdentities: таблице описаны различные поля в конфигурации:

Параметр Описание
kind Обязательное. Это определяет сценарий, для которого используется управляемое удостоверение. Это может быть одно из следующих KeyVaultэлементов или MetricsEngine. Для типа Engineможет быть несколько элементов.
type Обязательное. Тип удостоверения. Это может быть UserAssigned или SystemAssigned.
value Обязательное. Идентификатор ресурса управляемого удостоверения. Это не нужно указать, если тип имеет значение SystemAssigned.

Пример конфигурации эталонных удостоверений

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

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
failureCriteria:
  serverMetrics:
    - resourceId: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.Compute/virtualMachines/sample-vm
      metricNamespace: Microsoft.Compute/virtualMachines
      metricName: Percentage CPU
      aggregation: Average
      condition: GreaterThan
      value: 80
referenceIdentities:
  - kind: KeyVault
    type: UserAssigned
    value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity
  - kind: Metrics
    type: SystemAssigned
  - kind: Engine
    type: UserAssigned
    value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity
  - kind: Engine
    type: UserAssigned
    value: /subscriptions/abcdef01-2345-6789-0abc-def012345678/resourceGroups/sample-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sample-identity1

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

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

HTTP-запросы

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

Недвижимость Тип Описание
requestName струна Уникальное имя запроса. При настройке условий сбоя теста можно ссылаться на имя запроса.
responseVariables массив Список переменных ответа. Используйте переменные ответа для извлечения значения из запроса и ссылки на него в последующем запросе. Дополнительные сведения о переменных ответа.
responseVariables.extractorType струна Механизм извлечения значения из выходных данных ответа. Поддерживаются значения XPathExtractor, JSONExtractor и RegularExpression.
responseVariables.expression струна Выражение для получения выходных данных ответа. Выражение зависит от значения типа извлекателя.
responseVariables.variableName струна Уникальное имя переменной ответа. Вы можете ссылаться на эту переменную в последующем запросе с помощью синтаксиса {$variable-name} .
queryParameters массив Список параметров строки запроса для передачи в конечную точку.
queryParameters.key струна Имя параметра строки запроса.
queryParameters.value струна Значение параметра строки запроса.
requestType струна тип запроса; Поддерживаемые значения: URL или CURL.
endpoint струна URL-адрес конечной точки приложения для тестирования.
headers массив Список заголовков HTTP для передачи в конечную точку приложения. Укажите пару "ключ-значение" для каждого заголовка.
body струна Текст http-запроса. Можно использовать для requestBodyFormat указания формата содержимого текста.
requestBodyFormat струна Формат содержимого текста. Поддерживаемые значения: Text, , JSONJavaScript, HTMLи XML.
method струна Метод HTTP для вызова конечной точки. Поддерживаемые значения: GET, POST, , PUTDELETE, 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 :

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

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

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

Ключ Тип Значение по умолчанию Описание
region струна Имя региона Azure.
engineInstances целое число Количество экземпляров подсистемы для этого региона 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