Python 用 Azure Load Testing クライアント ライブラリ - バージョン 1.0.0

Azure Load Testing は、ユーザーが Azure Load Testing サービスとネイティブに対話できる Python のクライアント ライブラリをユーザーに提供します。 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 Developer LoadTesting SDK には、サービスと対話するためのメイン クライアント (LoadTestingClient) の 2 つのサブクライアント 、'administration' と '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 を参照します。

主要な概念

Python 用 Azure Load Test クライアント ライブラリを使用すると、クライアントを使用してこれらの各コンポーネントを操作できます。 ライブラリの主要なエントリ ポイントである 2 つの最上位クライアントがあります

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

これら 2 つのクライアントには、非同期の対応するクライアントもあります。

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

ロード テスト管理クライアント

LoadTestAdministrationClientは、ロード テスト、アプリ コンポーネント、メトリックの管理と構成に使用されます。

テスト

テストでは、テスト スクリプトと、ロード テストを実行するための構成設定を指定します。 Azure Load Testing リソースに 1 つ以上のテストを作成できます。

アプリ コンポーネント

Azure でホストされるアプリケーションに対してロード テストを実行すると、さまざまな Azure アプリケーション コンポーネント (サーバー側のメトリック) のリソース メトリックを監視できます。 ロード テストの実行中、そしてテストの完了後に、Azure Load Testing ダッシュボードでリソース メトリックを監視および分析できます。

メトリック

ロード テストでは、Azure Load Testing によってテストの実行に関するメトリックが収集されます。 メトリックには、次の 2 種類があります。

  1. クライアント側のメトリックでは、テスト エンジンによって報告された詳細が表示されます。 これらのメトリックには、仮想ユーザーの数、要求の応答時間、失敗した要求の数、1 秒あたりの要求数が含まれます。

  2. Azure でホストされるアプリケーションでは、サーバー側のメトリックを使用して、Azure アプリケーション コンポーネントに関する情報を提供できます。 メトリックは、データベースの読み取りの数、HTTP 応答の種類、またはコンテナー リソースの消費量に対して指定できます。

テスト実行クライアント

LoadTestRunClientは、ロード テストに対応するテスト実行を開始および停止するために使用されます。 テストの実行は、1 回のロード テストの実行を表します。 Apache JMeter スクリプトの実行に関連付けられているログ、ロード テストの YAML 構成、監視するアプリ コンポーネントの一覧、テストの結果を収集します。

Data-Plane エンドポイント

Azure Load Testing リソースのデータ プレーンは、次の URL 形式を使用してアドレス指定できます。

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

最初の GUID 00000000-0000-0000-0000-000000000000 は、Azure Load Testing リソースへのアクセスに使用される一意の識別子です。 その後に、リソースの Azure リージョンが続きます aaa

データ プレーン エンドポイントは、コントロール プレーン 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) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、 https://cla.microsoft.com を参照してください。

pull request を送信すると、CLA を提供して PR (ラベル、コメントなど) を適宜装飾する必要があるかどうかを CLA ボットが自動的に決定します。 ボットによって提供される手順にそのまま従ってください。 この操作は、Microsoft の CLA を使用するすべてのリポジトリについて、1 回だけ行う必要があります。

このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳細については、「倫理規定の FAQ」をご覧ください。追加の質問やコメントがある場合は opencode@microsoft.com にお問い合わせください。

トラブルシューティング

詳細については、近日公開予定です...