Azure Load Testing에서 기존 JMeter 스크립트를 사용하여 웹 사이트 부하 테스트

Apache JMeter 스크립트를 사용하여 Azure Portal Azure Load Testing을 사용하여 웹 애플리케이션을 로드하는 방법을 알아봅니다.

Azure Load Testing을 사용하면 기존 Apache JMeter 스크립트를 사용하여 클라우드 규모에서 부하 테스트를 실행할 수 있습니다. 또는 Azure Portal에서 URL 기반 부하 테스트를 만들 수도 있습니다.

기존 JMeter 스크립트를 사용하여 부하 테스트를 만드는 사용 사례는 다음과 같습니다.

  • 기존 JMeter 스크립트를 다시 사용하여 애플리케이션을 테스트하려고 합니다.
  • 단일 부하 테스트에서 여러 엔드포인트를 테스트하려고 합니다.
  • 데이터 기반 부하 테스트가 있습니다. 예를 들어 부하 테스트에서 CSV 데이터를 읽으려고 합니다.
  • 데이터베이스 또는 메시지 큐와 같이 HTTP 기반이 아닌 엔드포인트를 테스트하려고 합니다. Azure Load Testing은 JMeter가 지원하는 모든 통신 프로토콜을 지원합니다.

사전 요구 사항

Apache JMeter 스크립트 만들기

스크립트가 이미 있는 경우 부하 테스트 만들기로 건너뛸 수 있습니다. 이 섹션에서는 단일 웹 엔드포인트의 부하를 테스트하는 JMeter 테스트 스크립트 샘플을 만듭니다.

또한 Apache JMeter 테스트 스크립트 레코더를 사용하여 브라우저에서 애플리케이션을 탐색하는 동안 요청을 기록할 수 있습니다. 또는 cURL 명령을 가져와서 JMeter 테스트 스크립트에서 요청을 생성합니다.

JMeter 테스트 스크립트 샘플을 만들려면 다음을 수행합니다.

  1. 로컬 컴퓨터에 SampleTest.jmx 파일을 만듭니다.

    touch SampleTest.jmx
    
  2. 텍스트 편집기에서 SampleTest.jmx를 열고, 다음 코드 조각을 파일에 붙여넣습니다.

    이 스크립트는 웹 엔드포인트에 동시에 액세스하는 5명의 가상 사용자에 대한 부하 테스트를 시뮬레이션하며 완료하는 데 2분이 걸립니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
      <hashTree>
        <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Azure Load Testing Quickstart" enabled="true">
          <stringProp name="TestPlan.comments"></stringProp>
          <boolProp name="TestPlan.functional_mode">false</boolProp>
          <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
          <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
          <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="TestPlan.user_define_classpath"></stringProp>
        </TestPlan>
        <hashTree>
          <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Web endpoint test" enabled="true">
            <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
            <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
              <boolProp name="LoopController.continue_forever">false</boolProp>
              <intProp name="LoopController.loops">-1</intProp>
            </elementProp>
            <stringProp name="ThreadGroup.num_threads">5</stringProp>
            <stringProp name="ThreadGroup.ramp_time">10</stringProp>
            <boolProp name="ThreadGroup.scheduler">true</boolProp>
            <stringProp name="ThreadGroup.duration">120</stringProp>
            <stringProp name="ThreadGroup.delay">5</stringProp>
            <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
          </ThreadGroup>
          <hashTree>
            <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP request" enabled="true">
              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="Sample web test" enabled="true">
                <collectionProp name="Arguments.arguments"/>
              </elementProp>
              <stringProp name="HTTPSampler.domain"></stringProp>
              <stringProp name="HTTPSampler.port"></stringProp>
              <stringProp name="HTTPSampler.protocol"></stringProp>
              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
              <stringProp name="HTTPSampler.path"></stringProp>
              <stringProp name="HTTPSampler.method">GET</stringProp>
              <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
              <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
              <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
              <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
              <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
              <stringProp name="HTTPSampler.response_timeout"></stringProp>
            </HTTPSamplerProxy>
            <hashTree/>
          </hashTree>
        </hashTree>
      </hashTree>
    </jmeterTestPlan>
    
  3. 파일에서 HTTPSampler.domain 노드의 값을 엔드포인트의 호스트 이름으로 설정합니다. 예를 들어 https://www.contoso.com/app/products 엔드포인트를 테스트하려는 경우 호스트 이름은 www.contoso.com입니다.

    중요

    https 또는 http를 엔드포인트 URL에 포함하지 마세요.

  4. 파일에서 HTTPSampler.path 노드의 값을 엔드포인트의 경로로 설정합니다. 예를 들어 https://www.contoso.com/app/products URL의 경로는 /app/products입니다.

  5. 파일을 저장하고 닫습니다.

    중요

    JMeter 스크립트의 샘플러 이름에 PII(개인 식별 정보)를 포함하지 마세요. 샘플러 이름은 Azure Load Testing 테스트 실행 결과 대시보드에 표시됩니다.

부하 테스트 만들기

Azure Load Testing에서 부하 테스트를 만드는 경우 부하 테스트 계획을 정의하는 JMeter 스크립트를 지정합니다. Azure Load Testing 리소스는 여러 부하 테스트를 포함할 수 있습니다.

URL을 사용하여 빠른 테스트를 만들면 Azure Load Testing에서 해당 JMeter 스크립트를 자동으로 생성합니다.

Azure Portal에서 기존 JMeter 스크립트를 사용하여 부하 테스트를 만들려면 다음을 수행합니다.

  1. Azure 구독에 대한 자격 증명을 사용하여 Azure Portal에 로그인합니다.

  2. Azure Load Testing 리소스로 이동하여 왼쪽 창에서 테스트를 선택하고, + 만들기를 선택한 다음, JMeter 스크립트 업로드를 선택합니다.

    Azure Load Testing 페이지와 새 테스트 만들기 단추를 보여 주는 스크린샷

  3. 기본 탭에서 테스트 이름테스트 설명 정보를 입력합니다. 필요에 따라 만든 후 테스트 실행 확인란을 선택할 수 있습니다.

    테스트를 만들기 위한 기본 탭을 보여 주는 스크린샷

  4. 테스트 계획 탭에서 Apache JMeter 스크립트를 선택한 다음, 업로드를 선택하여 파일을 Azure에 업로드합니다.

    테스트 계획 탭을 보여 주는 스크린샷

    참고

    추가 JMeter 구성 파일을 업로드하거나 JMX 파일에서 참조하는 다른 파일을 업로드할 수 있습니다. 예를 들어 테스트 스크립트에서 CSV 데이터 세트를 사용하는 경우 해당 .csv 파일을 업로드할 수 있습니다. CSV 파일에서 데이터를 읽는 방법도 참조하세요.

  5. 검토 + 만들기를 선택합니다. 모든 설정을 검토한 다음, 만들기를 선택하여 부하 테스트를 만듭니다.

예를 들어 다른 JMX 파일을 업로드하기 위해 언제든지 테스트 구성을 업데이트할 수 있습니다. 테스트 목록에서 테스트를 선택한 다음, 편집을 선택합니다.

부하 테스트 실행

Azure Load Testing에서 부하 테스트를 시작하면 먼저 JMeter 스크립트 및 기타 파일을 테스트 엔진 인스턴스에 배포한 다음, 부하 테스트를 시작합니다.

만든 후 테스트 실행을 선택한 경우 부하 테스트가 자동으로 시작됩니다. 이전에 만든 부하 테스트를 수동으로 시작하려면 다음 단계를 수행합니다.

  1. Load Testing 리소스로 이동하여 왼쪽 창에서 테스트를 선택한 다음, 이전에 만든 테스트를 선택합니다.

    부하 테스트 목록을 보여 주는 스크린샷

  2. 테스트 세부 정보 페이지에서 실행 또는 테스트 실행을 선택합니다. 그런 다음, 확인 창에서 실행을 선택하여 부하 테스트를 시작합니다. 필요에 따라 테스트 실행 설명을 제공합니다.

    실행 확인 페이지를 보여 주는 스크린샷

    부하 테스트는 Azure Portal에서 언제든지 중지할 수 있습니다.

  3. Azure Portal에서 테스트 실행 세부 정보, 통계 및 클라이언트 메트릭을 확인합니다.

    테스트 실행 대시보드를 보여 주는 스크린샷

    실행 통계 및 오류 정보를 사용하여 로드 중인 애플리케이션의 성능 및 안정성 문제를 식별합니다.

다음 단계

기존 JMeter 테스트 스크립트를 기반으로 하여 클라우드 기반 부하 테스트를 만들었습니다. Azure 호스팅 애플리케이션의 경우 추가 애플리케이션 인사이트를 위해 서버 쪽 메트릭을 모니터링할 수도 있습니다.