Клиентская библиотека нагрузочного тестирования Azure для Python версии 1.0.0

Нагрузочное тестирование Azure предоставляет пользователю клиентская библиотека в Python, с помощью которой он может взаимодействовать со службой нагрузочного тестирования Azure. Нагрузочное тестирование Azure — это полностью управляемая служба нагрузочного тестирования, которая позволяет создавать высокомасштабную нагрузку. Служба имитирует трафик для ваших приложений, независимо от того, где они размещены. Разработчики, тестировщики и инженеры контроля качества (QA) могут использовать его для оптимизации производительности, масштабируемости или емкости приложений.

Документация

Вы можете приступить к работе с различными документами.

Начало работы

Установка пакета

python -m pip install azure-developer-loadtesting

Предварительные требования

  • Для использования этого пакета требуется Python 3.7 или более поздней версии.
  • Для использования этого пакета требуется подписка Azure .
  • Существующий экземпляр Azure Developer LoadTesting.

Создание с помощью учетных данных Azure Active Directory

Чтобы использовать учетные данные маркера Azure Active Directory (AAD), укажите экземпляр нужного типа учетных данных, полученных из библиотеки azure-identity .

Для проверки подлинности с помощью AAD необходимо сначала установить pipazure-identity

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

Например, войдите с помощью команды Azure CLI az login , и DefaultAzureCredential выполнит проверку подлинности от имени этого пользователя.

Используйте возвращенные учетные данные маркера для проверки подлинности клиента.

Создание клиента

Пакет SDK для azure Developer LoadTesting содержит 2 вложенных клиента основного клиента (LoadTestingClient) для взаимодействия со службой , "администрирование" и "test_run".

from azure.developer.loadtesting import LoadTestAdministrationClient

# for managing authentication and authorization
# can be installed from pypi, follow: https://pypi.org/project/azure-identity/
# using DefaultAzureCredentials, read more at: https://video2.skills-academy.com/en-us/python/api/azure-identity/azure.identity.defaultazurecredential?view=azure-python
from azure.identity import DefaultAzureCredential

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

<endpoint> ссылается на конечную точку или URL-адрес плоскости данных ресурса.

Основные понятия

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

  • LoadTestAdministrationClient (azure.developer.loadtesting.LoadTestAdministrationClient)
  • LoadTestRunClient (azure.developer.loadtesting.LoadTestRunClient)

Эти два клиента также имеют асинхронные аналоги, которые являются

  • LoadTestAdministrationClient (azure.developer.loadtesting.aio.LoadTestAdministrationClient)
  • LoadTestRunClient (azure.developer.loadtesting.aio.LoadTestRunClient)

Клиент администрирования нагрузочных тестов

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

Тест

Тест задает скрипт теста и параметры конфигурации для запуска нагрузочного теста. Вы можете создать один или несколько тестов в ресурсе нагрузочного тестирования Azure.

Компонент приложения

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

Метрики

Во время нагрузочного теста Azure Load Testing собирает метрики о выполнении теста. Есть два типа метрик:

  1. Метрики на стороне клиента предоставляют сведения, сообщаемые подсистемой тестирования. Эти метрики включают количество виртуальных пользователей, время ответа на запрос, количество неудачных запросов или количество запросов в секунду.

  2. Метрики на стороне сервера доступны для приложений, размещенных в Azure, и предоставляют сведения о компонентах приложений Azure. Метрики могут быть для количества операций чтения базы данных, типа HTTP-ответов или потребления ресурсов контейнера.

Клиент тестового запуска

LoadTestRunClient используется для запуска и остановки тестовых запусков, соответствующих нагрузочному тесту. Тестовый запуск представляет одно выполнение нагрузочного теста. Он собирает журналы, связанные с выполнением скрипта Apache JMeter, конфигурацию YAML нагрузочного теста, список отслеживаемых компонентов приложения и результаты теста.

Конечная точка Data-Plane

Плоскость данных ресурсов нагрузочного тестирования Azure доступна в следующем формате URL-адреса:

00000000-0000-0000-0000-000000000000.aaa.cnt-prod.loadtesting.azure.com

Первый GUID 00000000-0000-0000-0000-000000000000 — это уникальный идентификатор, используемый для доступа к ресурсу Нагрузочного тестирования Azure. За ним следует aaa регион Azure ресурса.

Конечная точка плоскости данных получается из API уровня управления.

Пример1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com

В приведенном выше примере eus представляет регион East USAzure .

Примеры

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

from azure.developer.loadtesting import LoadTestAdministrationClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError
import os

TEST_ID = "some-test-id"  
DISPLAY_NAME = "my-load-test"  

# set SUBSCRIPTION_ID as an environment variable
SUBSCRIPTION_ID = os.environ["SUBSCRIPTION_ID"]  

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:
    result = client.create_or_update_test(
        TEST_ID,
        {
            "description": "",
            "displayName": "My New Load Test",
            "loadTestConfig": {
                "engineInstances": 1,
                "splitAllCSVs": False,
            },
            "passFailCriteria": {
                "passFailMetrics": {
                    "condition1": {
                        "clientmetric": "response_time_ms",
                        "aggregate": "avg",
                        "condition": ">",
                        "value": 300
                    },
                    "condition2": {
                        "clientmetric": "error",
                        "aggregate": "percentage",
                        "condition": ">",
                        "value": 50
                    },
                    "condition3": {
                        "clientmetric": "latency",
                        "aggregate": "avg",
                        "condition": ">",
                        "value": 200,
                        "requestName": "GetCustomerDetails"
                    }
                }
            },
            "secrets": {
                "secret1": {
                    "value": "https://sdk-testing-keyvault.vault.azure.net/secrets/sdk-secret",
                    "type": "AKV_SECRET_URI"
                }
            },
            "environmentVariables": {
                "my-variable": "value"
            }
        }
    )
    print(result)
except HttpResponseError as e:
     print('Service responded with error: {}'.format(e.response.json()))

Отправка JMX-файла в тест

from azure.developer.loadtesting import LoadTestAdministrationClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError

TEST_ID = "some-test-id"  
FILE_NAME = "some-file-name.jmx"  

client = LoadTestAdministrationClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:

    # uploading .jmx file to a test
    resultPoller = client.begin_upload_test_file(TEST_ID, FILE_NAME, open("sample.jmx", "rb"))

    # getting result of LRO poller with timeout of 600 secs
    validationResponse = resultPoller.result(600)
    print(validationResponse)
    
except HttpResponseError as e:
    print("Failed with error: {}".format(e.response.json()))

Запуск теста

from azure.developer.loadtesting import LoadTestRunClient
from azure.identity import DefaultAzureCredential
from azure.core.exceptions import HttpResponseError

TEST_ID = "some-test-id"  
TEST_RUN_ID = "some-testrun-id" 
DISPLAY_NAME = "my-load-test-run"  

client = LoadTestRunClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:
    testRunPoller = client.begin_test_run(
    TEST_RUN_ID,
        {
            "testId": TEST_ID,
            "displayName": "My New Load Test Run",
        }
    )

    #waiting for test run status to be completed with timeout = 3600 seconds
    result = testRunPoller.result(3600)
    
    print(result)
except HttpResponseError as e:
    print("Failed with error: {}".format(e.response.json()))

Дальнейшие действия

Дополнительные примеры можно найти здесь.

Участие

На этом проекте приветствуются публикации и предложения. Для участия в большинстве процессов по разработке документации необходимо принять лицензионное соглашение участника (CLA), в котором указывается, что вы предоставляете нам права на использование ваших публикаций. Для получения подробных сведений посетите веб-страницу https://cla.microsoft.com.

При отправке запроса на включение внесенных изменений CLA-бот автоматически определит необходимость предоставления соглашения CLA и соответствующего оформления запроса на включение внесенных изменений (например, добавление метки, комментария). Просто следуйте инструкциям бота. Будет достаточно выполнить их один раз для всех репозиториев, поддерживающих соглашение CLA.

В рамках этого проекта действуют правила поведения в отношении продуктов с открытым исходным кодом Майкрософт. Дополнительные сведения: Вопросы и ответы по правилам поведения. С любыми другими вопросами или комментариями обращайтесь по адресу opencode@microsoft.com.

Устранение неполадок

Подробнее об этом ожидается в ближайшее время...