Azure Load Testing을 사용하여 JMeter의 CSV 파일에서 데이터 읽기

이 문서에서는 Azure Load Testing을 사용하여 JMeter의 CSV(쉼표로 구분된 값) 파일에서 데이터를 읽는 방법을 알아봅니다. 외부 CSV 파일의 데이터를 사용하여 JMeter 테스트 스크립트를 구성할 수 있도록 합니다. 예를 들어 CSV 파일의 모든 고객을 반복하면서 고객 세부 정보를 API 요청에 전달할 수 있습니다.

JMeter에서 테스트 스크립트의 CSV 데이터 세트 구성 요소를 사용하여 CSV 파일에서 데이터를 읽을 수 있습니다.

Azure Load Testing의 외부 파일에서 데이터를 읽으려면 부하 테스트에서 JMeter 테스트 스크립트와 함께 외부 파일을 업로드해야 합니다. 여러 병렬 테스트 엔진 인스턴스에서 테스트를 스케일 아웃하는 경우 이러한 인스턴스 간에 입력 데이터를 균등하게 분할하도록 선택할 수 있습니다.

먼저 GitHub에서 샘플 프로젝트를 복제 또는 다운로드합니다.

필수 조건

  • 활성 구독이 있는 Azure 계정. Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • Azure Load Testing 리소스입니다. 부하 테스트 리소스를 만들려면 부하 테스트 만들기 및 실행을 참조하세요.
  • Apache JMeter 테스트 스크립트(JMX).
  • (선택 사항) 테스트 스크립트를 작성하기 위한 Apache JMeter GUI. Apache JMeter를 설치하려면 Apache JMeter 시작을 참조하세요.

CSV 데이터를 읽도록 JMeter 스크립트 업데이트

이 섹션에서는 외부 CSV 파일을 참조하도록 Apache JMeter 스크립트를 구성합니다. CSV 데이터 세트 구성 요소를 사용하여 CSV 파일에서 데이터를 읽습니다.

Important

Azure Load Testing은 JMX 파일 및 모든 관련 파일을 단일 폴더에 업로드합니다. JMeter 스크립트에서 외부 파일을 참조하는 경우 테스트 스크립트에 파일 경로 참조가 없는지 확인합니다.

Apache JMeter GUI를 사용하여 JMeter 스크립트를 수정합니다.

  1. 테스트 스크립트에서 CSV 데이터 세트 구성 요소를 선택합니다.

  2. 파일 이름 정보를 업데이트하고 모든 파일 경로 참조를 제거합니다.

  3. 원하는 경우 여러 테스트 엔진에서 CSV 파일을 분할할 때 변수 이름에 CSV 필드 이름을 입력합니다.

    Azure Load Testing은 CSV 파일을 분할할 때 머리글 행을 유지하지 않습니다. 머리글 행을 사용하는 대신 CSV 데이터 세트 구성 요소에 변수 이름을 제공합니다.

    Screenshot that shows the JMeter UI to configure a C S V Data Set Config element.

  4. 스크립트의 모든 CSV 데이터 세트 구성 요소에 대해 이전 단계를 반복합니다.

  5. JMeter 스크립트를 저장하고 부하 테스트에 스크립트를 업로드합니다.

부하 테스트에 CSV 파일을 업로드합니다.

테스트 스크립트에서 외부 파일을 참조하는 경우 JMeter 테스트 스크립트와 함께 이러한 모든 파일을 업로드해야 합니다. 부하 테스트가 시작되면 Azure Load Testing은 모든 파일을 각 테스트 엔진 인스턴스의 단일 폴더에 복사합니다.

Important

Azure Load Testing은 CSV 파일을 분할할 때 머리글 행을 유지하지 않습니다. 부하 테스트에 CSV 파일을 추가하기 전에 파일에서 머리글 행을 제거합니다.

Azure Portal을 사용하여 부하 테스트에 CSV 파일을 추가하려면 다음을 수행합니다.

  1. Azure Portal에서 Azure Load Testing 리소스로 이동합니다.

  2. 테스트 목록을 보려면 왼쪽 창에서 테스트를 선택합니다.

  3. 확인란을 선택하여 목록에서 테스트를 선택한 다음 편집을 선택합니다.

    Screenshot that shows the list of load tests and the 'Edit' button.

  4. 테스트 계획 탭에서 컴퓨터에서 CSV 파일을 선택한 다음, 업로드를 선택하여 Azure에 파일을 업로드합니다.

    URL 기반 부하 테스트를 사용하는 경우 변수 열에 쉼표로 구분한 목록으로 변수 이름을 입력할 수 있습니다.

    Screenshot of the Test plan tab on the Edit test pane.

    CSV 파일의 크기가 50MB보다 크면 파일을 압축합니다. Zip 파일의 크기는 50MB 미만이어야 합니다. Azure Load Testing은 테스트 실행 중에 자동으로 파일 압축을 풉니다. Zip 아티팩트는 5개까지만 허용되며, 각 Zip당 파일 개수는 1,000개 이하여야 하고 압축을 풀었을 때 총 파일의 크기는 1GB 이하여야 합니다.

  5. 테스트를 수정하고 다시 실행할 때 새 구성을 사용하려면 적용을 선택합니다.

URL 기반 부하 테스트를 사용하는 경우 $(variable) 구문을 사용하여 HTTP 요청의 CSV 입력 데이터 파일에서 값을 참조할 수 있습니다.

테스트 엔진 간에 CSV 입력 데이터 분할

기본적으로 Azure Load Testing은 모든 테스트 엔진 인스턴스에서 수정되지 않은 입력 파일을 복사하고 처리합니다. 기본적으로 각 테스트 엔진은 전체 CSV 파일을 처리합니다. 또는 Azure Load Testing을 사용하여 모든 엔진 인스턴스에서 CSV 입력 데이터를 균등하게 분할할 수 있습니다. CSV 파일이 여러 개인 경우 각 파일이 균등하게 분할됩니다.

예를 들어, 대규모 고객 CSV 입력 파일이 있고 부하 테스트가 10개의 병렬 테스트 엔진에서 실행되는 경우 각 인스턴스는 고객의 1/10을 처리합니다.

Important

Azure Load Testing은 CSV 파일을 분할할 때 머리글 행을 유지하지 않습니다.

  1. CSV 파일을 읽을 때 변수 이름을 사용하도록 JMeter 스크립트를 구성합니다.
  2. 부하 테스트에 추가하기 전에 CSV 파일에서 머리글 행을 제거합니다.

입력 CSV 파일을 분할하도록 부하 테스트를 구성하려면:

  1. 부하 테스트를 위해 테스트 계획 탭으로 이동합니다.

  2. 테스트 엔진 간에 CSV를 균등하게 분할을 선택합니다.

    Screenshot that shows the checkbox to enable splitting input C S V files when configuring a test in the Azure portal.

  3. 적용을 선택하여 구성 변경을 확인합니다.

    다음에 테스트를 실행할 때 Azure Load Testing은 CSV 파일을 테스트 엔진 간에 균등하게 분할하고 처리합니다.

문제 해결

테스트 상태가 실패이고 테스트 로그에 File {my-filename} must exist and be readable이 있습니다.

부하 테스트가 실패 상태로 완료되면 테스트 로그를 다운로드할 수 있습니다.

테스트 로그에서 오류 메시지 File {my-filename} must exist and be readable이 표시되면 JMeter 스크립트를 실행할 때 입력 CSV 파일을 찾을 수 없습니다.

Azure Load Testing은 JMeter 스크립트와 함께 모든 입력 파일을 저장합니다. JMeter 스크립트에서 입력 CSV 파일을 참조하는 경우 파일 경로는 포함하지 말고 파일 이름만 사용해야 합니다.

다음 코드 조각은 CSVDataSet 요소를 사용하여 입력 파일을 읽는 JMeter 파일의 추출을 보여 줍니다. filename에 파일 경로는 포함되지 않습니다.

<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Websites CSV" enabled="true">
    <stringProp name="filename">websites.csv</stringProp>
    <stringProp name="fileEncoding">UTF-8</stringProp>
    <stringProp name="variableNames">CustomerId,CustomerName,Url</stringProp>
    <boolProp name="ignoreFirstLine">true</boolProp>
    <stringProp name="delimiter">,</stringProp>
    <boolProp name="quotedData">false</boolProp>
    <boolProp name="recycle">false</boolProp>
    <boolProp name="stopThread">true</boolProp>
    <stringProp name="shareMode">shareMode.all</stringProp>
    <stringProp name="TestPlan.comments">Read all records from the CSV file -  stop thread at end of file</stringProp>
</CSVDataSet>