シークレットと環境変数を構成する
Azure Load Testing でロード テストにパラメーターとしてシークレットと環境を渡す方法について説明します。 Apache JMeter スクリプトを編集しなくても、パラメーターを使用してロード テストの動作を変更できます。 たとえば、Web アプリケーションをテストするには、エンドポイント URL をパラメーターとして指定して、複数の環境でテスト スクリプトを再利用します。 パラメーターを使用して、JMeter テスト スクリプトで機密情報をハード コーディングする必要を回避することもできます。
Azure Load Testing サービスでは、次の 2 種類のパラメーターがサポートされています。
シークレット: 機密情報が含まれており、ロード テスト エンジンに安全に渡されます。 たとえば、シークレットは、テスト スクリプトでハードコーディングするのではなく、Web サービスの資格情報を提供します。
環境変数: 非センシティブな情報が含まれており、ロード テスト エンジンで環境変数として使用できます。 たとえば、環境変数を使用すると、アプリケーション エンドポイントの URL を構成できます。
新しいテストを作成するとき、または既存のテストを更新するときに、ロード テスト構成でパラメーターを指定できます。 CI/CD ワークフローでロード テストを実行する場合は、ロード テスト構成ファイルまたは CI/CD ワークフロー定義でパラメーターを定義します。
シークレットを使用してロード テストを構成する
このセクションでは、Azure Load Testing でロード テスト スクリプトにシークレットを渡す方法について説明します。 たとえば、シークレットを使用して、ロード テストしている Web サービス エンドポイントに API キーを渡すことができます。 API キーを構成に格納したり、スクリプトにハードコーディングしたりする代わりに、シークレット ストアに保存してシークレットへのアクセスを厳密に制御できます。
Azure Load Testing を使用すると、シークレットを Azure Key Vault に格納できます。 または、CI/CD パイプラインでロード テストを実行するときに、Azure Pipelines や GitHub Actions などの CI/CD テクノロジに関連付けられているシークレット ストアを使用することもできます。
Azure Load Testing でシークレットを使用するには、次の手順を実行します。
- シークレット の値をシークレット ストアに格納する
- シークレットへの参照を Apache JMeter テスト スクリプトに渡します。
GetSecretカスタム関数を使用して、Apache JMeter テスト スクリプトのシークレット値を使用します。
重要
GetSecret カスタム関数は、Azure Load Testing で JMeter テスト スクリプトを実行する場合にのみ使用できます。 テスト スクリプトをローカルで実行する場合は、テスト スクリプトを更新し、別の方法でシークレット値を読み取る必要があります。
GitHub シークレット ストアを使用してロード テスト シークレットを保存する
CI/CD シークレット ストア内のシークレットを使い、それを CI/CD でロード テストに渡すには:
シークレット値を GitHub Actions シークレット ストアに追加します。
GitHub では、gitHub リポジトリ シークレット 使用できます。
シークレットを入力パラメーターとして CI/CD ワークフローのロード テスト タスク/アクションに渡します。
次の YAML スニペットは、Load Testing GitHub アクションにシークレットを渡す方法を示しています。
- name: 'Azure Load Testing' uses: azure/load-testing@v1 with: loadtestConfigFile: 'SampleApp.yaml' loadtestResource: 'MyTest' resourceGroup: 'loadtests-rg' secrets: | [ { "name": "appToken", "value": "${{ secrets.MY_SECRET }}" } ]重要
シークレット入力パラメーターの名前は、Apache JMeter スクリプトで使用される名前と一致する必要があります。
CI/CD シークレット ストアでシークレットを指定し、Azure Load Testing への参照を渡しました。 これで、Apache JMeter スクリプトでシークレットを使用できるようになりました。
Apache JMeter でシークレットを使用する
次に、先ほど指定したシークレットを使用するように Apache JMeter スクリプトを更新します。
最初に、シークレット値を取得するユーザー定義変数を作成します。 その後、この変数をテストで使用できます。 たとえば、HTTP 要求ヘッダーで API トークンを渡す場合です。
JMX ファイルにユーザー定義変数を作成し、
GetSecretカスタム関数を使用してシークレット値を割り当てます。GetSecret(<my-secret-name>)関数は、シークレット名を引数として受け取ります。 この同じ名前は、後の手順でロード テストを構成するときに使用します。次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。
または、次のコード スニペット例に示すように、JMX ファイルを直接編集することもできます。
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="appToken" elementType="Argument"> <stringProp name="Argument.name">udv_appToken</stringProp> <stringProp name="Argument.value">${__GetSecret(appToken)}</stringProp> <stringProp name="Argument.desc">Value for x-secret header </stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments>テスト スクリプトでユーザー定義変数を参照します。
${}構文を使用して、スクリプト内の変数を参照できます。 次の例では、udv_appToken変数を使用して HTTP ヘッダーを設定します。<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> <collectionProp name="HeaderManager.headers"> <elementProp name="" elementType="Header"> <stringProp name="Header.name">api-key</stringProp> <stringProp name="Header.value">${udv_appToken}</stringProp> </elementProp> </collectionProp> </HeaderManager>
環境変数を使用してロード テストを構成する
このセクションでは、環境変数を使用して、ロード テストにパラメーターを渡します。
環境変数を使用するように Apache JMeter スクリプトを更新します。 たとえば、アプリケーション エンドポイントのホスト名を構成します。
ロード テストを構成し、環境変数をテスト スクリプトに渡します。
Apache JMeter で環境変数を使用する
このセクションでは、環境変数を使用してスクリプトの動作を制御するように Apache JMeter スクリプトを更新します。
最初に環境変数を読み取るユーザー定義変数を定義し、テスト実行でこの変数を使用できます。 たとえば、HTTP ドメインを更新します。
JMX ファイルにユーザー定義変数を作成し、
System.getenv関数を使用して環境変数の値を割り当てます。System.getenv("<my-variable-name>")関数は、環境変数の名前を引数として受け取ります。 ロード テストを構成するときに、この同じ名前を使用します。次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。
または、次のコード スニペット例に示すように、JMX ファイルを直接編集することもできます。
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="appToken" elementType="Argument"> <stringProp name="Argument.name">udv_webapp</stringProp> <stringProp name="Argument.value">${__BeanShell( System.getenv("webapp") )}</stringProp> <stringProp name="Argument.desc">Web app URL</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> </Arguments>テスト スクリプトでユーザー定義変数を参照します。
${}構文を使用して、スクリプト内の変数を参照できます。 次の例では、udv_webapp変数を使用して、アプリケーション エンドポイントの URL を構成します。<stringProp name="HTTPSampler.domain">${udv_webapp}</stringProp>
Azure Load Testing で環境変数を構成する
環境変数を Apache JMeter スクリプトに渡すには、Azure portal、YAML テスト構成ファイル、または CI/CD ワークフローで直接ロード テストを構成できます。
次の YAML スニペットは、GitHub Actions の例を示しています。
- name: 'Azure Load Testing'
uses: azure/load-testing
with:
loadtestConfigFile: 'SampleApp.yaml'
loadtestResource: 'MyTest'
resourceGroup: 'loadtests-rg'
env: |
[
{
"name": "webapp",
"value": "myapplication.contoso.com"
}
]