[アーティクル] 12/15/2023
4 人の共同作成者
フィードバック
この記事の内容
CI/CD パイプラインを作成することで、Azure Load Testing でロード テストを自動化できます。 この記事では、Azure Load Testing で既存のテストを呼び出すように GitHub Actions、Azure Pipelines、またはその他の CI ツールを手動で構成する方法について説明します。 ロード テストを自動化し、負荷条件下でアプリケーションのパフォーマンスと安定性を継続的に検証します。
次の手順で CI/CD パイプラインに既存のロード テストを追加します。
CI ツールが Azure ロード テスト リソースに接続できるようにサービス認証を構成します。
JMeter テスト スクリプトやロード テスト 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 プロジェクトにサービス接続 を作成して、Azure サブスクリプション内のリソースにアクセスします。 サービス接続を作成すると、Azure DevOps によって Microsoft Entra サービス プリンシパル オブジェクトが作成されます。
Azure DevOps 組織 (https://dev.azure.com/<your-organization>
) にサインインし、プロジェクトを選択します。
<your-organization>
テキスト プレースホルダーをプロジェクト識別子に置き換えます。
[プロジェクトの設定] >[サービス接続] >[+ New service connection] (+ 新しいサービス接続) の順に選択します。
[新しいサービス接続] ウィンドウで、[Azure Resource Manager] を選択して、[次へ] を選択します。
[サービス プリンシパル (自動)] 認証方法を選択し、[次へ] を選択します。
サービス接続の詳細を入力し、[保存] を選択してサービス接続を作成します。
フィールド
値
スコープのレベル
[サブスクリプション] 。
サブスクリプション
ロード テスト リソースをホストする Azure サブスクリプションを選択します。
リソース グループ
ロード テスト リソースが含まれるリソース グループを選択します。
サービス接続名
サービス接続の一意の名前を入力します。
すべてのパイプラインへのアクセス許可を与える
オン。
サービス接続の一覧から、前に作成した接続を選択し、[サービス プリンシパルの管理] を選択します。
Azure portal が別のブラウザー タブで開き、サービス プリンシパルの詳細が表示されます。
Azure portal で、[表示名] の値をコピーします。
次の手順でこの値を使用して、ロード テストを実行するためのアクセス許可をサービス プリンシパルに付与します。
Azure Load Testing へのアクセスを許可する
Azure Load Testing では、Azure RBAC を使用して、ロード テスト リソースで特定のアクティビティを実行するためのアクセス許可を付与します。 CI/CD パイプラインからロード テストを実行するには、ロード テスト共同作成者ロールをサービス プリンシパルに付与します。
Azure portal の Azure Load Testing リソースに移動します。
[アクセス制御 (IAM)] >[追加] >[ロールの割り当ての追加] の順に選択します。
[ロール] タブ のジョブ関数ロールの一覧で [ロード テスト共同作成者] を選びます。
[メンバー] タブで [メンバーの選択] を選択し、前にコピーした表示名を使用してサービス プリンシパルを検索します。
サービス プリンシパルを選択し、[選択] を選択します。
[確認と 割り当て] タブで、[確認と割り当て] を選択して ロールの割り当てを追加します。
Azure Pipelines ワークフロー定義でサービス接続を使用して、Azure ロード テスト リソースにアクセスできるようになりました。
GitHub Actions ワークフローから Azure Load Testing リソースにアクセスするには、最初に Microsoft Entra サービス プリンシパル を作成します。 このサービス プリンシパルは、Microsoft Entra の 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/"
}
出力の JSON オブジェクトをクリップボードにコピーします。
次の手順では、サービス プリンシパル情報を GitHub Actions シークレットとして格納します。
Azure 資格情報を GitHub Actions シークレットに格納する
GitHub Actions シークレットを作成して、サービス プリンシパル情報を安全に格納します。 ワークフロー定義でこのシークレットを使用して接続し、Azure で認証して、Azure ロード テスト リソースにアクセスします。
GitHub Actions ワークフローを作成するには
GitHub でリポジトリを参照します。
[設定>Secrets & variables >Actions] を選択 します。
[New repository secret] (新しいリポジトリ シークレット) を選択し、シークレット情報を入力して、[シークレットの追加] を選択して新しいシークレットを作成します。
フィールド
値
名前
AZURE_CREDENTIALS
シークレット
先ほどコピーしたサービス プリンシパル作成コマンドの JSON 出力を貼り付けます。
格納されている資格情報を使用して、GitHub Actions ワークフローから Azure サブスクリプションとロード テスト リソースにアクセスできるようになりました。
別の CI/CD ツールを使用している場合は、Azure CLI を使用して Azure リソースを操作します。 ロード テスト リソースへの CI ツール アクセスを承認するには、次の手順を実行します。
Microsoft Entra サービス プリンシパル を作成して Azure サブスクリプションに接続し、Azure ロード テスト リソースにアクセスします。
ロード テスト共同作成者ロールを割り当てることで、ロード テストを作成して実行するためのアクセス許可をサービス プリンシパルに付与します。
AZURE 資格情報を CI ツールに安全に格納します。
CI ツールのサービス承認を構成するには、次の手順を実行します。
サービス プリンシパルを作成し、ロード テスト共同作成者ロールを割り当てます。
プレースホルダーと<load-testing-resource-name>
テキスト プレースホルダーを<resource-group-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/"
}
値、clientSecret
値をclientId
tenantId
コピーし、CI ツールにシークレットとして安全に格納します。
これらの値を使用して、Azure CLI az login
コマンドを使用して Azure サブスクリプションにサインインします。
リポジトリにロード テスト ファイルを追加する
CI/CD ワークフローで Azure Load Testing を使用してロード テストを実行するには、ソース管理リポジトリにすべてのロード テスト入力ファイルを追加する必要があります。
既存のロード テストがない場合は、次のファイルをソース コード リポジトリに追加します。
ロード テスト構成 YAML ファイル。 ロード テスト構成 YAML ファイルを作成する 方法について説明します。
テスト 計画ファイル。 JMeter ベースのテストの場合は、JMeter テスト スクリプト (JMX
ファイル) を追加します。 URL ベースのテストの場合は、要求 JSON ファイルを 追加します。
JMeter ユーザー プロパティ ファイル 。
テスト 計画で使用する入力データ ファイル。 たとえば、CSV データ ファイルなどです。
既存のロード テストがある場合は、構成設定とすべての入力ファイルを Azure portal から直接ダウンロードできます。 次の手順を実行して、Azure portal の既存のロード テスト用の入力ファイルをダウンロードします。
Azure portal の Azure Load Testing リソースに移動します。
左側のペインで、[テスト] を選択してロード テストのリストを表示し、対象のテストを選択します。
使っているテストの実行の横にある省略記号 ( ... ) を選び、 [Download input file] (入力ファイルのダウンロード) を選びます。
ブラウザーは、ロード テスト入力ファイルを含む zip 形式のフォルダーをダウンロードします。
任意の zip ツールを使用して、入力ファイルを抽出します。
このフォルダーには次のファイルが格納されています。
config.yaml
: ロード テストの YAML 構成ファイル。 このファイルは、CI/CD ワークフロー定義で参照します。
.jmx
: JMeter テスト スクリプト
ロード テストの実行に必要な 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 タスク 拡張機能が使用されます。
Azure DevOps Marketplace で Azure Load Testing タスク拡張機能 を開き、[Get it free] (無料で入手) を選択します。
Azure DevOps 組織を選択し、[インストール] を選択して拡張機能をインストールします。
選択した Azure DevOps 組織の管理者特権がない場合は、[要求] を選択して、管理者に拡張機能のインストールを依頼します。
Azure Pipelines ワークフローを更新する
Azure Pipelines ワークフローを更新して、Azure ロード テスト リソースのロード テストを実行します。
Azure DevOps 組織 (https://dev.azure.com/<your-organization>
) にサインインし、プロジェクトを選択します。
左側のナビゲーションで [パイプライン] を選択し、パイプラインを選択して、[編集] を選択し、ワークフロー定義を編集します。
または、[パイプラインの作成] を選択して、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
プロパティを使用して、パラメーターまたはシークレットをロード テストに渡すことができます。
publish
タスクを使用して、テスト結果を成果物として Azure Pipelines ワークフローの実行で発行します。
- publish: $(System.DefaultWorkingDirectory)/loadTest
artifact: loadTestResults
GitHub Actions ワークフローを更新する
Azure ロード テスト リソースのロード テストを実行するために Azure Pipelines ワークフローを更新します。
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
プロパティを使用して、パラメーターまたはシークレットをロード テストに渡すことができます。
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
、および tenandId
値を使用します。
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-group>
および<load-test-config-yaml>
テキスト プレースホルダーを<load-testing-resource>
、ロード テスト リソースの名前、リソース グループ名、および以前にリポジトリに追加したロード テスト構成 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>
テキスト プレースホルダーをプロジェクト識別子に置き換えます。
新しいパイプラインを作成した場合:
[パイプライン] を選択し、使用するパイプラインを選択します。
省略記号を選択し、[削除] を選択します。
パイプライン名を入力し、[削除] を選択してパイプラインを削除します。
既存のワークフロー定義を変更した場合は、ロード テストを実行するための変更を元に戻し、ワークフローを保存します。
サービス接続を削除します。
[プロジェクト設定] >[サービス接続] の順に選択し、サービス接続を選択します。
[編集] >[削除] の順に選択して、サービス接続を削除します。
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)
次の手順
次の記事に進み、テストの失敗条件を定義し、テストの実行を比較することで、パフォーマンスの低下を特定する方法を参照してください。