シークレットと環境変数を構成する

完了

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 でシークレットを使用するには、次の手順を実行します。

  1. シークレット の値をシークレット ストアに格納する
  2. シークレットへの参照を Apache JMeter テスト スクリプトに渡します。
  3. GetSecret カスタム関数を使用して、Apache JMeter テスト スクリプトのシークレット値を使用します。

重要

GetSecret カスタム関数は、Azure Load Testing で JMeter テスト スクリプトを実行する場合にのみ使用できます。 テスト スクリプトをローカルで実行する場合は、テスト スクリプトを更新し、別の方法でシークレット値を読み取る必要があります。

GitHub シークレット ストアを使用してロード テスト シークレットを保存する

CI/CD シークレット ストア内のシークレットを使い、それを CI/CD でロード テストに渡すには:

  1. シークレット値を GitHub Actions シークレット ストアに追加します。

    GitHub では、gitHub リポジトリ シークレット 使用できます。

    GitHub リポジトリ シークレットを追加する方法を示すスクリーンショット。

  2. シークレットを入力パラメーターとして 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 トークンを渡す場合です。

  1. JMX ファイルにユーザー定義変数を作成し、GetSecret カスタム関数を使用してシークレット値を割り当てます。

    GetSecret(<my-secret-name>) 関数は、シークレット名を引数として受け取ります。 この同じ名前は、後の手順でロード テストを構成するときに使用します。

    次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。

    Apache JMeter スクリプトにユーザー定義変数を追加する方法を示すスクリーンショット。

    または、次のコード スニペット例に示すように、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>
    
  2. テスト スクリプトでユーザー定義変数を参照します。

    ${} 構文を使用して、スクリプト内の変数を参照できます。 次の例では、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>
    

環境変数を使用してロード テストを構成する

このセクションでは、環境変数を使用して、ロード テストにパラメーターを渡します。

  1. 環境変数を使用するように Apache JMeter スクリプトを更新します。 たとえば、アプリケーション エンドポイントのホスト名を構成します。

  2. ロード テストを構成し、環境変数をテスト スクリプトに渡します。

Apache JMeter で環境変数を使用する

このセクションでは、環境変数を使用してスクリプトの動作を制御するように Apache JMeter スクリプトを更新します。

最初に環境変数を読み取るユーザー定義変数を定義し、テスト実行でこの変数を使用できます。 たとえば、HTTP ドメインを更新します。

  1. JMX ファイルにユーザー定義変数を作成し、System.getenv 関数を使用して環境変数の値を割り当てます。

    System.getenv("<my-variable-name>") 関数は、環境変数の名前を引数として受け取ります。 ロード テストを構成するときに、この同じ名前を使用します。

    次の図に示すように、Apache JMeter IDE を使用してユーザー定義変数を作成できます。

    環境変数のユーザー定義変数を JMeter スクリプトに追加する方法を示すスクリーンショット。

    または、次のコード スニペット例に示すように、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>
    
  2. テスト スクリプトでユーザー定義変数を参照します。

    ${} 構文を使用して、スクリプト内の変数を参照できます。 次の例では、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"
        }
    ]