Skip to main content

Microsoft Azure Developer LoadTesting Client Library for Python

Project description

Azure Load Testing client library for Python

Azure Load Testing provides client library in python to the user by which they can interact natively with Azure Load Testing service. Azure Load Testing is a fully managed load-testing service that enables you to generate high-scale load. The service simulates traffic for your applications, regardless of where they're hosted. Developers, testers, and quality assurance (QA) engineers can use it to optimize application performance, scalability, or capacity.

Documentation

Various documentation is available to help you get started

Getting started

Installing the package

python -m pip install azure-developer-loadtesting

Prequisites

  • Python 3.7 or later is required to use this package.
  • You need an Azure subscription to use this package.
  • An existing Azure Developer LoadTesting instance.

Create with an Azure Active Directory Credential

To use an Azure Active Directory (AAD) token credential, provide an instance of the desired credential type obtained from the azure-identity library.

To authenticate with AAD, you must first pip install azure-identity

After setup, you can choose which type of credential from azure.identity to use.

As an example, sign in via the Azure CLI az login command and DefaultAzureCredential will authenticate as that user.

Use the returned token credential to authenticate the client.

Create the client

Azure Developer LoadTesting SDK has 2 sub-clients of the main client (LoadTestingClient) to interact with the service, 'administration' and 'test_run'.

from azure.developer.loadtesting import LoadTestingClient

# for managing authentication and authorization
# can be installed from pypi, follow: https://pypi-hypernode.com/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 = LoadTestingClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

<endpoint> refers to the data-plane endpoint/URL of the resource.

Key concepts

The following components make up the Azure Load Testing service. The Azure Load Test client library for python allows you to interact with each of these components through the use of clients. There are two top-level clients which are the main entry points for the library

  • LoadTestingClient.administration (azure.developer.loadtesting.LoadTestingClient.administration)
  • LoadTestingClient.test_run (azure.developer.loadtesting.LoadTestingClient.test_run)

These two clients also have there asynchronous counterparts, which are

  • LoadTestingClient.administration (azure.developer.loadtesting.aio.LoadTestingClient.administration)
  • LoadTestingClient.test_run (azure.developer.loadtesting.aio.LoadTestingClient.test_run)

Load Test Administration Client

The LoadTestingClient.administration is used to administer and configure the load tests, app components and metrics.

Test

A test specifies the test script, and configuration settings for running a load test. You can create one or more tests in an Azure Load Testing resource.

App Component

When you run a load test for an Azure-hosted application, you can monitor resource metrics for the different Azure application components (server-side metrics). While the load test runs, and after completion of the test, you can monitor and analyze the resource metrics in the Azure Load Testing dashboard.

Metrics

During a load test, Azure Load Testing collects metrics about the test execution. There are two types of metrics:

  1. Client-side metrics give you details reported by the test engine. These metrics include the number of virtual users, the request response time, the number of failed requests, or the number of requests per second.

  2. Server-side metrics are available for Azure-hosted applications and provide information about your Azure application components. Metrics can be for the number of database reads, the type of HTTP responses, or container resource consumption.

Test Run Client

The LoadTestingClient.test_run is used to start and stop test runs corresponding to a load test. A test run represents one execution of a load test. It collects the logs associated with running the Apache JMeter script, the load test YAML configuration, the list of app components to monitor, and the results of the test.

Data-Plane Endpoint

Data-plane of Azure Load Testing resources is addressable using the following URL format:

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

The first GUID 00000000-0000-0000-0000-000000000000 is the unique identifier used for accessing the Azure Load Testing resource. This is followed by aaa which is the Azure region of the resource.

The data-plane endpoint is obtained from Control Plane APIs.

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

In the above example, eus represents the Azure region East US.

Examples

Creating a load test

from azure.developer.loadtesting import LoadTestingClient
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 = LoadTestingClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

try:
    result = client.administration.create_or_update_test(
        TEST_ID,
        {
            "description": "",
            "displayName": DISPLAY_NAME,
            "loadTestConfig": {
                "engineInstances": 1,
                "splitAllCSVs": False,
            },
            "secrets": {},
            "environmentVariables": {},
            "passFailCriteria": {"passFailMetrics": {}}
        },
    )
    print(result)
except HttpResponseError as e:
     print('Service responded with error: {}'.format(e.response.json()))

Uploading .jmx file to a Test

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

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

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

try:

    result = client.administration.upload_test_file(TEST_ID, FILE_NAME, open("sample.jmx", "rb"))
    print(result)
except HttpResponseError as e:
    print("Failed with error: {}".format(e.response.json()))

Running a Test

from azure.developer.loadtesting import LoadTestingClient
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 = LoadTestingClient(endpoint='<endpoint>', credential=DefaultAzureCredential())

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

    #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()))

Next steps

More samples can be found here.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information, see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Troubleshooting

More about it is coming soon...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

azure-developer-loadtesting-1.0.0b3.zip (107.9 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file azure-developer-loadtesting-1.0.0b3.zip.

File metadata

  • Download URL: azure-developer-loadtesting-1.0.0b3.zip
  • Upload date:
  • Size: 107.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.28.2 setuptools/58.1.0 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/3.9.16

File hashes

Hashes for azure-developer-loadtesting-1.0.0b3.zip
Algorithm Hash digest
SHA256 70985cce16267bedeabe230c1fb51698a823066cff71b76476c460ddd2921c48
MD5 b0f841a7c871b539337fd0443105dfd2
BLAKE2b-256 96d100d38cc5228e9710fca50c4c0feeb0731d240d313a9a7faf32f5b634e522

See more details on using hashes here.

File details

Details for the file azure_developer_loadtesting-1.0.0b3-py3-none-any.whl.

File metadata

  • Download URL: azure_developer_loadtesting-1.0.0b3-py3-none-any.whl
  • Upload date:
  • Size: 77.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.28.2 setuptools/58.1.0 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/3.9.16

File hashes

Hashes for azure_developer_loadtesting-1.0.0b3-py3-none-any.whl
Algorithm Hash digest
SHA256 c7651e4e99f06b650ee9456fa70982f77e06687fb404e25aa6f59358e6e8a96a
MD5 98e4c4b3e600d4596c203d306a542b99
BLAKE2b-256 a2f9d5c15ab1bdb4c1fb14c41527851f2bf2f5f8658f758dd837b8bf2aea1945

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page