跳转到主要内容

Microsoft Azure Developer LoadTesting Python客户端库

项目描述

Azure Load Testing Python客户端库

Azure Load Testing为用户提供Python客户端库,用户可以通过该库以本地方式与Azure Load Testing服务交互。Azure Load Testing是一个全托管负载测试服务,允许您生成高规模负载。该服务模拟应用程序的流量,无论它们托管在哪里。开发人员、测试人员和质量保证(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 进行身份验证,您必须首先 pip 安装 azure-identity

设置完成后,您可以选择从 azure.identity 中使用哪种类型的 凭证

例如,通过 Azure CLI 的 az login 命令登录,并使用 DefaultAzureCredential 作为该用户进行身份验证。

使用返回的令牌凭证进行客户端身份验证。

创建客户端

Azure 开发者负载测试 SDK 有 2 个主要客户端(LoadTestingClient)的子客户端,用于与服务交互,分别是 'administration' 和 'test_run'。

from azure.developer.loadtesting import LoadTestAdministrationClient

# for managing authentication and authorization
# can be installed from pypi, follow: https://pypi.ac.cn/project/azure-identity/
# using DefaultAzureCredentials, read more at: https://learn.microsoft.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 Load Test Python 客户端库允许您通过使用客户端与这些组件交互。该库有两个顶级客户端,是库的主要入口点

  • LoadTestAdministrationClientazure.developer.loadtesting.LoadTestAdministrationClient
  • LoadTestRunClientazure.developer.loadtesting.LoadTestRunClient

这两个客户端也有它们异步的对应物,分别是

  • LoadTestAdministrationClientazure.developer.loadtesting.aio.LoadTestAdministrationClient
  • LoadTestRunClientazure.developer.loadtesting.aio.LoadTestRunClient

负载测试管理客户端

LoadTestAdministrationClient 用于管理和配置负载测试、应用程序组件和指标。

测试

测试指定测试脚本和运行负载测试的配置设置。您可以在 Azure 负载测试资源中创建一个或多个测试。

应用程序组件

当您为 Azure 托管的应用程序运行负载测试时,您可以监视不同 Azure 应用程序组件(服务器端指标)的资源指标。在负载测试运行期间以及测试完成后,您可以在 Azure 负载测试仪表板中监视和分析资源指标。

指标

在负载测试期间,Azure Load Testing 收集有关测试执行的指标。有两种类型的指标

  1. 客户端指标提供了测试引擎报告的详细信息。这些指标包括虚拟用户数量、请求响应时间、失败请求数量或每秒请求数量。

  2. 服务器端指标适用于 Azure 托管的应用程序,并提供有关您的 Azure 应用程序组件的信息。指标可以是数据库读取次数、HTTP 响应类型或容器资源消耗。

测试运行客户端

LoadTestRunClient 用于启动和停止与负载测试对应的测试运行。测试运行表示负载测试的一次执行。它收集与运行 Apache JMeter 脚本、负载测试 YAML 配置、要监视的应用程序组件列表和测试结果相关的日志。

数据平面端点

可以使用以下 URL 格式通过 Azure Load Testing 资源的数据平面进行寻址

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

第一个 GUID 00000000-0000-0000-0000-000000000000 是用于访问 Azure Load Testing 资源的唯一标识符。其后是 aaa,这是资源的 Azure 区域。

数据平面端点是从控制平面 API 获取的。

示例: 1234abcd-12ab-12ab-12ab-123456abcdef.eus.cnt-prod.loadtesting.azure.com

在上面的示例中,eus 表示 Azure 区域 East US

示例

创建负载测试

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-bot 将自动确定您是否需要提供 CLA,并适当地装饰 PR(例如,标签,注释)。只需遵循机器人提供的说明即可。您只需在整个使用我们的 CLA 的所有仓库中这样做一次。

本项目采用了Microsoft 开源行为准则。有关更多信息,请参阅行为准则常见问题解答或通过opencode@microsoft.com联系以提出任何额外的问题或评论。

故障排除

更多信息即将推出...

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

azure-developer-loadtesting-1.0.0.zip (117.1 kB 查看哈希值)

上传时间

构建分布

azure_developer_loadtesting-1.0.0-py3-none-any.whl (85.5 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面