CI/CD パイプラインを作成することで、Azure Load Testingでロード テストを自動化できます。 この記事では、Azure Load Testingで既存のテストを呼び出すように、GitHub Actions、Azure Pipelines、またはその他の CI ツールを手動で構成する方法について説明します。 ロード テストを自動化し、負荷条件下でアプリケーションのパフォーマンスと安定性を継続的に検証します。
次の手順で CI/CD パイプラインに既存のロード テストを追加します。
- CI ツールが Azure ロード テスト リソースに接続できるようにサービス認証を構成します。
- テスト スクリプトやロード テスト YAML 構成など、ロード テスト入力ファイルをリポジトリに追加します。
- AZURE LOAD TESTINGを呼び出すように CI/CD パイプライン定義を更新します。
[前提条件]
- Azure DevOpsの組織とプロジェクト。 Azure DevOps組織がない場合は、無料で作成。 Azure Pipelinesの概要に関するヘルプが必要な場合は、「最初のパイプラインを作成するを参照してください。
- GitHub アカウント。 GitHubアカウントをお持ちでない場合は、無料で作成。
- ロード テスト入力ファイルを格納し、GitHub Actions ワークフローを作成するためのGitHub リポジトリ。 作成するには、 新しいリポジトリの作成を参照してください。
- CI パイプラインを作成または変更するためのアクセス許可。
- ロード テストの入力ファイルを保存するためのソース コード リポジトリ。
CI/CD ワークフローでロード テストを実行するには、ロード テスト リソースにアクセスするためのアクセス許可を CI/CD ワークフローに付与する必要があります。 CI/CD ワークフローのサービス プリンシパルを作成し、ロード テスト共同作成者Azure RBAC ロールを割り当てます。
Azure Pipelinesでサービス接続を作成する
Azure Pipelinesでは、Azure DevOps プロジェクトに service connection を作成し、Azure サブスクリプション内のリソースにアクセスします。 サービス接続を作成すると、Azure DevOps Microsoft Entraサービス プリンシパル オブジェクトが作成されます。
Azure DevOps組織 (https://dev.azure.com/<your-organization>) にサインインし、プロジェクトを選択します。
<your-organization> テキスト プレースホルダーをプロジェクト識別子に置き換えます。
プロジェクト設定>サービス接続>+ 新しいサービス接続 を選択します。
新しいサービス接続 ペインで、Azure Resource Manager を選択し、 Next を選択します。
[サービス プリンシパル (自動)] 認証方法を選択し、[次へ] を選択します。
サービス接続の詳細を入力し、[保存] を選択してサービス接続を作成します。
| フィールド |
価値 |
|
スコープのレベル |
[サブスクリプション]。 |
|
サブスクリプション |
ロード テスト リソースをホストするAzure サブスクリプションを選択します。 |
|
リソース グループ |
ロード テスト リソースが含まれるリソース グループを選択します。 |
|
サービス接続名 |
サービス接続の一意の名前を入力します。 |
|
すべてのパイプラインにアクセス許可を付与する |
オンにします。 |
サービス接続の一覧から、前に作成した接続を選択し、[サービス プリンシパルの管理] を選択します。
Azure ポータルが別のブラウザー タブで開き、サービス プリンシパルの詳細が表示されます。
Azure ポータルで、Display name 値をコピーします。
次の手順でこの値を使用して、ロード テストを実行するためのアクセス許可をサービス プリンシパルに付与します。
Azure Load Testingへのアクセスを許可する
Azure Load Testingでは、Azure RBAC を使用して、ロード テスト リソースで特定のアクティビティを実行するためのアクセス許可を付与します。 CI/CD パイプラインからロード テストを実行するには、ロード テスト共同作成者ロールをサービス プリンシパルに付与します。
Azure ポータルで、Azure Load Testing リソースに移動します。
[アクセス制御 (IAM)]>[追加]>[ロールの割り当ての追加] の順に選択します。
[ロール] タブのジョブ関数ロールの一覧で [ロード テスト共同作成者] を選択します。
Azure ポータルの [ロールの割り当ての追加] ページで、ロード テスト共同作成者ロールが強調表示されているロールの一覧を示すスクリーンショットです。
[メンバー] タブで [メンバーの選択] を選択し、前にコピーした表示名を使用してサービス プリンシパルを検索します。
サービス プリンシパルを選択し、[選択] を選択します。
[確認と 割り当て] タブで、[確認と割り当て] を選択して ロールの割り当てを追加します。
Azure Pipelines ワークフロー定義のサービス接続を使用して、Azureロード テスト リソースにアクセスできるようになりました。
GitHub Actions ワークフローからAzure Load Testing リソースにアクセスするには、最初にMicrosoft Entra サービス プリンシパルを作成します。 このサービス プリンシパルは、Microsoft Entra IDのGitHub Actions ワークフローを表します。
次に、Azure Load Testing リソースでロード テストを作成して実行するためのアクセス許可をサービス プリンシパルに付与します。
サービス プリンシパルを作成する
Azure サブスクリプションにサービス プリンシパルを作成し、ロード テスト共同作成者ロールを割り当てて、GitHub Actions ワークフローがロード テストを実行するAzureロード テスト リソースにアクセスできるようにします。
サービス プリンシパルを作成して Load Test Contributor ロールを割り当てます。
# Get the resource ID for the load testing resource - replace the text place holders.
loadtest=$(az resource show -g <resource-group-name> -n <load-testing-resource-name> --resource-type "Microsoft.LoadTestService/loadtests" --query "id" -o tsv)
echo $loadtest
# Create a service principal and assign the Load Test Contributor role - the scope is limited to the load testing resource.
az ad sp create-for-rbac --name "my-load-test-cicd" --role "Load Test Contributor" \
--scopes $loadtest \
--json-auth
出力は、サービス プリンシパルを表す JSON オブジェクトです。 この情報は、GitHub Actions ワークフローのAzureで認証するために使用します。
Creating 'Load Test Contributor' role assignment under scope
{
"clientId": "00000000-0000-0000-0000-000000000000",
"clientSecret": "00000000-0000-0000-0000-000000000000",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-0000-000000000000",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
注
このコマンドを実行すると、--sdk-auth の非推奨の警告が表示されることがあります。 または、OpenID Connect (OIDC) ベースの認証を使用して、AzureでGitHubを認証することもできます。 OpenID Connect でAzureログイン アクションを使用する方法について説明します。
出力の JSON オブジェクトをクリップボードにコピーします。
次の手順では、サービス プリンシパル情報をGitHub Actions シークレットとして格納します。
GitHub ActionsのシークレットにAzure資格情報を格納
GitHub Actions シークレットを作成して、サービス プリンシパル情報を安全に格納します。 ワークフロー定義でこのシークレットを使用して、Azureで認証し、Azureロード テスト リソースにアクセスするために接続します。
注
OpenID Connect を使用してAzureで認証する場合は、Azureログイン アクションでサービス プリンシパル オブジェクトを渡す必要はありません。 OpenID Connect でAzureログイン アクションを使用する方法について説明します。
GitHub Actions シークレットを作成するには:
GitHubで、リポジトリを参照します。
[設定]>[シークレットと変数]>[アクション] の順に選択します。
[New repository secret] (新しいリポジトリ シークレット) を選択し、シークレット情報を入力して、[シークレットの追加] を選択して新しいシークレットを作成します。
| フィールド |
価値 |
|
名前 |
AZURE_CREDENTIALS |
|
シークレット |
先ほどコピーしたサービス プリンシパル作成コマンドの JSON 出力を貼り付けます。 |
保存されている資格情報を使用して、GitHub Actions ワークフローから Azure サブスクリプションとロード テスト リソースにアクセスできるようになりました。
別の CI/CD ツールを使用している場合は、Azure CLIを使用してAzure リソースを操作します。 Load Testing リソースへの CI ツールのアクセスを認可するには、次の手順を実行します。
- Microsoft Entra サービス プリンシパルを作成して、Azure サブスクリプションに接続し、Azureロード テスト リソースにアクセスします。
- ロード テスト共同作成者ロールを割り当てることで、ロード テストを作成して実行するためのアクセス許可をサービス プリンシパルに許可します。
- AZURE資格情報を CI ツールに安全に格納します。
CI ツールのサービス認可を構成するには、次の手順を実行します。
サービス プリンシパルを作成してロード テスト共同作成者ロールを割り当てます。
<resource-group-name> と <load-testing-resource-name> のテキスト プレースホルダーを置換してください。
# Get the resource ID for the load testing resource - replace the text place holders.
loadtest=$(az resource show -g <resource-group-name> -n <load-testing-resource-name> --resource-type "Microsoft.LoadTestService/loadtests" --query "id" -o tsv)
echo $loadtest
# Create a service principal and assign the Load Test Contributor role - the scope is limited to the load testing resource.
az ad sp create-for-rbac --name "my-load-test-cicd" --role "Load Test Contributor" \
--scopes $loadtest \
--json-auth
出力は、サービス プリンシパルを表す JSON オブジェクトです。
Creating 'Load Test Contributor' role assignment under scope
{
"clientId": "00000000-0000-0000-0000-000000000000",
"clientSecret": "00000000-0000-0000-0000-000000000000",
"subscriptionId": "00000000-0000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-0000-000000000000",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
clientId、clientSecret、tenantId の値をコピーし、CI ツール内にシークレットとして安全に保存します。
これらの値を使用して、Azure CLI az login コマンドを使用してAzure サブスクリプションにサインインします。
リポジトリ内にロード テスト ファイルを追加する
CI/CD ワークフローでAzure Load Testingを使用してロード テストを実行するには、すべてのロード テスト入力ファイルをソース管理リポジトリに追加する必要があります。
既存のロード テストがない場合は、次のファイルをソース コード リポジトリに追加してください。
- ロード テスト構成 YAML ファイル。
ロード テスト構成 YAML ファイルを作成する方法について確認してください。
- テスト計画ファイル。 JMeter ベースのテストの場合は、JMeter テスト スクリプト (
JMX ファイル) を追加します。 リロートベースのテストの場合は、リロート テスト スクリプト (.py ファイル) を追加します。 URL ベースのテストの場合は、要求 JSON ファイルを追加します。
- 任意の JMeter ユーザー プロパティ ファイル。
- テスト計画で使用される任意の入力データ ファイル。 たとえば、CSV データ ファイル。
既存のロード テストがある場合は、構成設定とすべての入力ファイルを Azure ポータルから直接ダウンロードできます。 Azure ポータルで既存のロード テスト用の入力ファイルをダウンロードするには、次の手順を実行します。
Azure ポータルで、Azure Load Testing リソースに移動します。
左側のペインで、[テスト] を選択してロード テストのリストを表示し、対象のテストを選択します。
使用しているテストの実行の横にある省略記号 (...) を選択し、[Download input file] (入力ファイルのダウンロード) を選択します。
ブラウザーは、ロード テスト入力ファイルを含む zip 形式のフォルダーをダウンロードします。
任意の zip ツールを使用して、入力ファイルを抽出します。
このフォルダーには次のファイルが格納されています。
-
config.yaml: ロード テストの YAML 構成ファイル。 このファイルは、CI/CD ワークフロー定義で参照します。
-
.jmx または .py: JMeter または Locust テストスクリプト
- ロード テストの実行に必要な CSV ファイルやユーザー プロパティ ファイルなどの追加の入力ファイル。
抽出されたすべての入力ファイルをソース管理リポジトリにコミットします。
CI/CD パイプラインを構成するソース コード リポジトリを使用します。
CI/CD ワークフロー定義を更新する
Azure Load Testingでは、ロード テストを実行するためのGitHub ActionsとAzure Pipelinesの両方がサポートされます。
Azure DevOpsのAzure Load Testing拡張機能をインストールする
ロード テストを作成して実行するために、Azure Pipelines ワークフロー定義では、Azure DevOps Marketplace の Azure Load Testing task 拡張機能が使用されます。
Azure DevOps Marketplace で Azure Load Testing タスク拡張機能を開き、 Get it free を選択します。
Azure DevOps組織を選択し、Install を選択して拡張機能をインストールします。
選択したAzure DevOps組織の管理者特権がない場合は、Request を選択して、拡張機能のインストールを管理者に要求します。
Azure Pipelines ワークフローを更新する
Azure Pipelines ワークフローを更新して、Azureロード テスト リソースのロード テストを実行します。
Azure DevOps組織 (https://dev.azure.com/<your-organization>) にサインインし、プロジェクトを選択します。
左側のナビゲーションで [パイプライン] を選択し、パイプラインを選択して、[編集] を選択し、ワークフロー定義を編集します。
または、Create Pipeline を選択して、Azure Pipelinesに新しいパイプラインを作成します。
AzureLoadTest タスクを使用してロード テストを実行します。
loadTestConfigFile プロパティで前にエクスポートしたロード テスト構成ファイルを指定します。
<load-testing-resource> と <load-testing-resource-group> テキスト プレースホルダーを、Azureロード テスト リソースとリソース グループの名前に置き換えます。
- task: AzureLoadTest@1
inputs:
azureSubscription: $(serviceConnection)
loadTestConfigFile: 'config.yaml'
loadTestResource: <load-testing-resource>
resourceGroup: <load-testing-resource-group>
必要に応じて、env プロパティまたは secrets プロパティを使用して、パラメーターまたはシークレットをロード テストに渡すことができます。
ロード テストの実行が完了するのを待たずに続行する場合は、 waitForCompletion: false を設定します。
publish タスクを使用して、Azure Pipelines ワークフロー実行でテスト結果を成果物として発行します。
- publish: $(System.DefaultWorkingDirectory)/loadTest
artifact: loadTestResults
GitHub Actions ワークフローを更新する
GitHub Actions ワークフローを更新して、Azureロード テスト リソースのロード テストを実行します。
GitHubで、リポジトリを参照します。
GitHub Actionsワークフローを編集するか、GitHub リポジトリに新しいワークフローを作成します。
actions/checkout アクションを使用し、ロード テスト入力ファイルを使用してリポジトリをチェックアウトします。
- name: Checkout
uses: actions/checkout@v3
azure/login アクションを使用して、格納されている資格情報を使用してAzureで認証します。
ワークフロー定義に次の YAML コンテンツを貼り付けます。
- name: Login to Azure
uses: azure/login@v1
continue-on-error: false
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
azure/load-testing アクションを使用してロード テストを実行します。
loadTestConfigFile プロパティで前にエクスポートしたロード テスト構成ファイルを指定します。
<load-testing-resource> と <load-testing-resource-group> テキスト プレースホルダーを、Azureロード テスト リソースとリソース グループの名前に置き換えます。
- name: 'Azure Load Testing'
uses: azure/load-testing@v1
with:
loadTestConfigFile: 'config.yaml'
loadTestResource: <load-testing-resource>
resourceGroup: <load-testing-resource-group>
必要に応じて、env プロパティまたは secrets プロパティを使用して、パラメーターまたはシークレットをロード テストに渡すことができます。
ロード テストの実行が完了するのを待たずに続行する場合は、 waitForCompletion: false を設定します。
actions/upload-artifact アクションを使用して、GitHub Actions ワークフロー実行でテスト結果を成果物として発行します。
- uses: actions/upload-artifact@v2
with:
name: loadTestResults
path: ${{ github.workspace }}/loadTest
Azure CLIを使用して、Azureロード テスト リソースのロード テストを実行するように CI ワークフローを更新します。 CI ツールの詳細を使用して、CI ワークフローに次のコマンドを追加します。
サービス プリンシパルを使用して、Azure サブスクリプションにサインインします。
前に保存した clientId、clientSecret、tenantId の値を使用します。
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
az account set -s $AZURE_SUBSCRIPTION_ID
ロード テスト構成 YAML ファイルを使用してロード テストを作成します。
<load-testing-resource>、<load-testing-resource-group>、<load-test-config-yaml> テキスト プレースホルダーを、ロード テスト リソースの名前、リソース グループ名、前にリポジトリに追加したロード テスト構成 YAML ファイルのファイル名に置換してください。
az load test create --load-test-resource <load-testing-resource> --resource-group <load-testing-resource-group> --test-id sample-test-id --load-test-config-file <load-test-config-yaml>
ロード テストを実行します。
testRunId="run_"`date +"%Y%m%d%_H%M%S"`
displayName="Run"`date +"%Y/%m/%d_%H:%M:%S"`
az load test-run create --load-test-resource <load-testing-resource> --test-id sample-test-id --test-run-id $testRunId --display-name $displayName --description "Test run from CLI"
ロード テスト実行のクライアント側メトリックを取得して表示します。
az load test-run metrics list --load-test-resource <load-testing-resource> --test-run-id $testRunId --metric-namespace LoadTestRunMetrics
ロード テストの結果の表示
CI/CD パイプラインからロード テストを実行すると、CI/CD 出力ログでサマリー結果を直接表示できます。 テスト結果をパイプライン成果物として発行した場合は、CSV ファイルをダウンロードしてさらにレポートすることもできます。
リソースをクリーンアップする
作成したどのリソースも使用する予定がない場合は、追加の課金が発生しないように削除します。
Azure Pipelinesの変更を削除します。
Azure DevOps組織 (https://dev.azure.com/<your-organization>) にサインインし、プロジェクトを選択します。
<your-organization> テキスト プレースホルダーをプロジェクト識別子に置き換えます。
新しいパイプラインを作成した場合:
[パイプライン] を選択し、使用するパイプラインを選択します。
省略記号を選択し、[削除] を選択します。
パイプライン名を入力し、[削除] を選択してパイプラインを削除します。
既存のワークフロー定義を変更した場合は、ロード テストを実行するための変更を元に戻し、ワークフローを保存します。
サービス接続を削除します。
-
Project設定>Service connections を選択し、サービス接続を選択します。
-
[編集]>[削除] の順に選択して、サービス接続を削除します。
GitHub Actions変更を削除します。
-
GitHubで、リポジトリを参照します。
- 新しいワークフロー定義を作成した場合は、
.github/workflows フォルダー内のワークフロー YAML ファイルを 削除します。
- 既存のワークフロー定義を変更した場合は、ロード テストを実行するための変更を元に戻し、ワークフローを保存します。
サービス プリンシパルを削除します。
az ad sp delete --id $(az ad sp show --display-name "my-load-test-cicd" -o tsv)
CI ワークフロー内の変更を元に戻します。
サービス プリンシパルを削除します。
az ad sp delete --id $(az ad sp show --display-name "my-load-test-cicd" -o tsv)
次のステップ
次の記事に進み、テストの失敗条件を定義し、テストの実行を比較することで、パフォーマンスの低下を特定する方法を参照してください。