Azure Load Testing에서 비밀 및 환경 변수 구성

이 문서에서는 Azure Load Testing에서 부하 테스트에 비밀 및 환경을 매개 변수로 전달하는 방법을 알아봅니다. Apache JMeter 스크립트를 편집하지 않고 부하 테스트의 동작을 변경하는 방법을 알아봅니다. 예를 들어 웹 애플리케이션을 테스트하려면 엔드포인트 URL을 매개 변수로 지정하여 여러 환경에서 테스트 스크립트를 다시 사용합니다. JMeter 테스트 스크립트에서 중요한 정보를 하드 코드할 필요가 없도록 매개 변수를 사용할 수도 있습니다.

Azure Load Testing 서비스는 다음 두 가지 유형의 매개 변수를 지원합니다.

  • 비밀: 중요한 정보를 포함하고 있으며 부하 테스트 엔진에 안전하게 전달됩니다. 예를 들어 비밀은 테스트 스크립트에 하드 코딩하는 대신 웹 서비스 자격 증명을 제공합니다. 자세한 내용은 비밀을 사용하여 부하 테스트 구성을 참조하세요.

  • 환경 변수: 중요하지 않은 정보를 포함하고 있으며 부하 테스트 엔진에서 환경 변수로 사용할 수 있습니다. 예를 들어 환경 변수는 애플리케이션 엔드포인트 URL을 구성 가능하게 만듭니다. 자세한 내용은 환경 변수를 사용하여 부하 테스트 구성을 참조하세요.

새 테스트를 만들거나 기존 테스트를 업데이트할 때 부하 테스트 구성에서 매개 변수를 지정할 수 있습니다. CI/CD 워크플로에서 부하 테스트를 실행하는 경우 부하 테스트 구성 파일 또는 CI/CD 워크플로 정의에서 매개 변수를 정의합니다.

필수 조건

  • 활성 구독이 있는 Azure 계정. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

  • Azure Load Testing 리소스입니다. Azure Load Testing 리소스를 만들어야 하는 경우 부하 테스트 만들기 및 실행 빠른 시작을 참조하세요.

비밀을 사용하여 부하 테스트 구성

이 섹션에서는 Azure Load Testing에서 부하 테스트 스크립트에 비밀을 전달하는 방법을 알아봅니다. 예를 들어 비밀을 사용하여 테스트 중인 웹 서비스 엔드포인트에 API 키를 전달할 수 있습니다. API 키를 구성에 저장하거나 스크립트에 하드 코딩하는 대신 비밀 저장소에 저장하여 비밀에 대한 액세스를 엄격하게 제어할 수 있습니다.

Azure Load Testing을 사용하면 비밀을 Azure Key Vault에 저장할 수 있습니다. 또는 CI/CD 파이프라인에서 부하 테스트를 실행할 때, Azure Pipelines 또는 GitHub Actions 같은 CI/CD 기술과 연결된 비밀 저장소를 사용할 수도 있습니다.

Azure Load Testing에서 비밀을 사용하려면 다음 단계를 수행합니다.

  1. 비밀 저장소(Azure Key Vault 또는 CI/CD 비밀 저장소)에 비밀 값을 저장합니다.
  2. 비밀에 대한 참조를 Apache JMeter 테스트 스크립트에 전달합니다.
  3. GetSecret 사용자 지정 함수를 사용하여 Apache JMeter 테스트 스크립트의 비밀 값을 사용합니다.

Important

Azure Load Testing에서 JMeter 테스트 스크립트를 실행하는 경우에만 GetSecret 사용자 지정 함수를 사용할 수 있습니다. 테스트 스크립트를 로컬로 실행하는 경우 테스트 스크립트를 업데이트하고 다른 방식으로 비밀 값을 읽어야 합니다.

Azure Key Vault를 사용하여 부하 테스트 비밀 저장

Azure Load Testing에서 Azure Key Vault를 사용하여 테스트 스크립트에 비밀 값을 전달할 수 있습니다. Azure Load Testing 구성에서 비밀에 대한 참조를 추가합니다. 그러면 Azure Load Testing은 이 참조를 사용하여 Apache JMeter 스크립트에서 비밀 값을 검색합니다.

또한 비밀 값을 검색하려면 Azure Key Vault에 대한 액세스 권한을 Azure Load Testing에 부여해야 합니다.

참고 항목

CI/CD 프로세스의 일부로 부하 테스트를 실행하는 경우 관련 비밀 저장소를 사용할 수도 있습니다. CI/CD 비밀 저장소 사용으로 건너뜁니다.

Azure Key Vault에서 비밀 만들기

  1. 아직 비밀 값을 추가하지 않은 경우 키 자격 증명 모음에 비밀 값을 추가합니다.

    Important

    방화벽 또는 가상 네트워킹을 통해 Azure 키 자격 증명 모음에 대한 액세스를 제한한 경우 다음 단계에 따라 신뢰할 수 있는 Azure 서비스에 대한 액세스 권한을 부여합니다.

  2. 비밀의 키 자격 증명 모음 비밀 식별자를 검색합니다. 이 비밀 식별자를 사용하여 부하 테스트를 구성합니다.

    Screenshot that shows the details of a secret in an Azure key vault.

    비밀 식별자는 Azure Key Vault에 있는 비밀의 전체 URI입니다. 필요에 따라 버전 번호를 포함할 수도 있습니다. 예를 들어 https://myvault.vault.azure.net/secrets/mysecret/ 또는 https://myvault.vault.azure.net/secrets/mysecret/abcdef01-2345-6789-0abc-def012345678입니다.

부하 테스트에 비밀 추가

  1. 부하 테스트 구성에서 비밀을 참조합니다.

    Apache JMeter 스크립트에서 참조하는 각 비밀의 부하 테스트 비밀 매개 변수를 정의합니다. 매개 변수 이름은 Apache JMeter 테스트 스크립트에서 사용하는 비밀 이름과 일치해야 합니다. 매개 변수 값은 키 자격 증명 모음 보안 식별자입니다.

    다음 중 하나를 수행하여 비밀 매개 변수를 지정할 수 있습니다.

    • Azure Portal에서 부하 테스트를 선택하고, 구성을 선택하고, 매개 변수 탭을 선택한 다음, 매개 변수 세부 정보를 입력합니다.

      Screenshot that shows where to add secret details to a load test in the Azure portal.

    • CI/CD 워크플로를 구성 중이고 Azure Key Vault를 사용하는 경우 secrets 속성을 사용하여 YAML 구성 파일에서 비밀을 지정할 수 있습니다. 구문에 대한 자세한 내용은 테스트 구성 YAML 참조를 확인하세요.

  2. Azure Load Testing이 Azure Key Vault의 비밀에 액세스하는 데 사용하는 ID를 지정합니다.

    ID는 부하 테스트 리소스의 시스템 할당 ID 또는 사용자 할당 ID 중 하나입니다. 앞에서 액세스 권한을 부여한 것과 동일한 ID를 사용해야 합니다.

    다음 중 하나를 수행하여 키 자격 증명 모음 참조 ID를 지정할 수 있습니다.

    • Azure Portal에서 부하 테스트를 선택하고, 구성을 선택하고, 매개 변수 탭을 선택한 다음, Key Vault 참조 ID를 구성합니다.

      Screenshot that shows how to select key vault reference identity.

    • CI/CD 워크플로를 구성 중이고 Azure Key Vault를 사용하는 경우 keyVaultReferenceIdentity 속성을 사용하여 YAML 구성 파일에서 참조 ID를 지정할 수 있습니다. 구문에 대한 자세한 내용은 테스트 구성 YAML 참조를 확인하세요.

Azure Key Vault에 대한 액세스 권한 부여

Azure Key Vault에 부하 테스트 비밀 또는 인증서를 저장하는 경우 부하 테스트 리소스는 관리 ID를 사용하여 키 자격 증명 모음에 액세스합니다. 관리 ID를 구성한 후 키 자격 증명 모음에서 이러한 값을 읽으려면 부하 테스트 리소스 권한의 관리 ID를 부여해야 합니다.

Azure Key Vault에서 비밀 또는 인증서를 읽을 수 있는 Azure Load Testing 리소스 권한을 부여하려면 다음을 수행합니다.

  1. Azure Portal에서 Azure Key Vault 리소스로 이동합니다.

    Key Vault이 없으면 Azure Key Vault 빠른 시작의 지침에 따라 Key Vault을 만듭니다.

  2. 왼쪽 창에서 액세스 정책을 선택한 다음, 만들기를 선택합니다.

  3. 권한 탭의 비밀 권한에서 가져오기를 선택한 후 다음을 선택합니다.

    참고 항목

    Azure Load Testing은 인증서의 프라이빗 키를 사용할 수 있도록 인증서를 비밀로 검색합니다.

  4. 보안 주체 탭에서 부하 테스트 리소스에 대한 관리 ID를 검색하여 선택하고 다음을 선택합니다.

    시스템 할당 관리 ID를 사용하는 경우 관리 ID 이름은 Azure Load Testing 리소스의 이름과 일치합니다.

  5. 다음을 다시 선택합니다.

    테스트가 실행되면 부하 테스트 리소스와 연결된 관리 ID가 이제 키 자격 증명 모음에서 부하 테스트에 대한 비밀 또는 인증서를 읽을 수 있습니다.

Azure Key Vault에 비밀을 추가하고 부하 테스트의 비밀을 구성했으므로 이제 Apache JMeter에서 비밀 사용으로 이동할 수 있습니다.

CI/CD 비밀 저장소를 사용하여 부하 테스트 비밀 저장

CI/CD 워크플로에서 Azure Load Testing을 사용하는 경우 연결된 비밀 저장소를 사용할 수도 있습니다. 예를 들어 GitHub repository secrets 또는 Azure Pipelines의 비밀 변수를 사용할 수 있습니다.

참고 항목

이미 키 자격 증명 모음을 사용하는 경우 부하 테스트 비밀을 저장하는 데에도 사용할 수 있습니다. Azure Key Vault 사용으로 건너뛰세요.

CI/CD 비밀 저장소에서 비밀을 사용하고 CI/CD의 부하 테스트에 전달하려면 다음을 수행합니다.

  1. 비밀 값이 아직 없는 경우 CI/CD 비밀 저장소에 비밀 값을 추가합니다.

    Azure Pipelines에서 파이프라인을 편집하고 변수를 추가할 수 있습니다.

    Screenshot that shows how to add a variable to Azure Pipelines.

    GitHub에서 GitHub 리포지토리 비밀을 사용할 수 있습니다.

    Screenshot that shows how to add a GitHub repository secret.

    참고 항목

    키 자격 증명 모음 비밀 식별자가 아닌 실제 비밀 값을 값으로 사용해야 합니다.

  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 }}"
            }
        ]
    

    다음 YAML 코드 조각은 비밀을 Azure Pipelines 작업에 전달하는 방법을 보여줍니다.

    - task: AzureLoadTest@1
      inputs:
        azureSubscription: 'MyAzureLoadTestingRG'
        loadTestConfigFile: 'SampleApp.yaml'
        loadTestResource: 'MyTest'
        resourceGroup: 'loadtests-rg'
        secrets: |
          [
              {
              "name": "appToken",
              "value": "$(mySecret)"
              }
          ]
    

    Important

    비밀 입력 매개 변수의 이름은 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를 사용하여 사용자 정의 변수를 만들 수 있습니다.

    Screenshot that shows how to add user-defined variables to your Apache JMeter script.

    또는 다음 예제 코드 조각처럼 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를 사용하여 사용자 정의 변수를 만들 수 있습니다.

    Screenshot that shows how to add user-defined variables for environment variables to your JMeter script.

    또는 다음 예제 코드 조각처럼 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 워크플로에서 직접 부하 테스트를 구성하면 됩니다.

Important

부하 테스트에 대한 환경 변수를 정의할 때, 환경 변수의 이름은 Apache JMeter 스크립트에서 사용한 변수 이름과 일치해야 합니다.

Azure Portal을 사용하여 부하 테스트에 대한 환경 변수를 지정하려면 다음을 수행합니다.

  1. 테스트 구성 페이지에서 매개 변수 탭을 선택합니다.

  2. 환경 변수 섹션에서 환경 변수 이름을 입력한 다음, 적용을 선택합니다.

    Screenshot that shows how to add an environment variable to a load test in the Azure portal.

CI/CD 워크플로에서 부하 테스트를 실행하는 경우 YAML 테스트 구성 파일에서 환경 변수를 정의할 수 있습니다. 구문에 대한 자세한 내용은 테스트 구성 YAML 참조를 확인하세요.

또는 CI/CD 워크플로 정의에서 환경 변수를 직접 지정할 수도 있습니다. Azure Load Testing 작업 또는 Azure Pipelines 태스크에 대한 입력 매개 변수를 사용하여 환경 변수를 Apache JMeter 스크립트에 전달합니다.

다음 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"
        }
    ]

다음 YAML 코드 조각은 Azure Pipelines 예제를 보여줍니다.

- task: AzureLoadTest@1
  inputs:
    azureSubscription: 'MyAzureLoadTestingRG'
    loadTestConfigFile: 'SampleApp.yaml'
    loadTestResource: 'MyTest'
    resourceGroup: 'loadtests-rg'
    env: |
      [
          {
          "name": "webapp",
          "value": "myapplication.contoso.com"
          }
      ]

FAQ

Azure Load Testing 서비스는 내 비밀 값을 저장하나요?

아니요. Azure Load Testing 서비스는 비밀 값을 저장하지 않습니다. 키 자격 증명 모음 비밀 URI를 사용하는 경우 이 서비스는 비밀 URI만 저장하고, 각 테스트 실행의 비밀 값은 페치합니다. CI/CD 워크플로에서 비밀 값을 제공하는 경우 테스트 실행 후에 비밀 값을 사용할 수 없습니다. 테스트 실행마다 이러한 값을 제공해야 합니다.

YAML 구성 파일과 CI/CD 워크플로 모두에 매개 변수가 있으면 어떻게 되나요?

YAML 구성 파일과 Azure Load Testing 작업 또는 Azure Pipelines 태스크 모두에 매개 변수가 있는 경우 CI/CD 워크플로의 값이 테스트 실행에 사용됩니다.

Azure Load Testing 태스크 또는 작업을 통해 매개 변수를 전달하여 CI/CD 워크플로에서 테스트를 만들고 실행했습니다. Azure Portal에서 동일한 매개 변수를 사용하여 이 테스트를 실행할 수 있나요?

매개 변수의 값은 CI/CD 워크플로에서 전달될 때 저장되지 않습니다. Azure Portal에서 테스트를 실행할 때 매개 변수 값을 다시 제공해야 합니다. 누락된 값을 입력하라는 메시지가 표시될 것입니다. 비밀 값으로는 키 자격 증명 모음 비밀 URI를 입력합니다. 테스트 실행 또는 다시 실행 페이지에서 입력하는 값은 해당 테스트 실행에만 유효합니다. 테스트 수준에서 변경하려면 테스트 구성으로 이동하여 매개 변수 값을 입력합니다.