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 ロード テスト リソース。 ロード テストのリソースを作成するには、「ロード テストの作成と実行」を参照してください。
  • Apache JMeter テスト スクリプト (JMX)。
  • (省略可能)テスト スクリプトを作成する Apache JMeter GUI。 Apache JMeter をインストールするには、「Apache JMeter はじめに」を参照してください。

CSV データを読み取るために JMeter スクリプトを更新する

このセクションでは、外部 CSV ファイルを参照するように Apache JMeter スクリプトを構成します。 CSV データ セットの構成要素を使用して、CSV ファイルからデータを読み取ります。

重要

Azure Load Testing では、JMX ファイルとすべての関連ファイルが 1 つのフォルダーにアップロードされます。 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 は、各テスト エンジン インスタンス上の 1 つのフォルダーにすべてのファイルをコピーします。

重要

AZURE Load Testing では、CSV ファイルを分割するときにヘッダー行は保持されません。 CSV ファイルをロード テストに追加する前に、ファイルからヘッダー行を削除します。

Azure portal を使用してロード テストに CSV ファイルを追加:

  1. Azure portal で Azure ロード テスト リソースに移動します。

  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 ファイルのサイズが 50 MB を超える場合は、ファイルを zip 圧縮します。 zip ファイルのサイズは 50 MB 未満にする必要があります。 Azure Load Testing では、テストの実行中にファイルが自動的に解凍されます。 各 zip のファイルが最大 1000 個で、圧縮されていない合計サイズが 1 GB の zip アーティファクトは 5 つだけです。

  5. [適用] を選択してテストを変更し、テストを再実行するときに新しい構成を使用します。

ヒント

URL ベースのロード テストを使用している場合は、構文を使用して、HTTP 要求の CSV 入力データ ファイルの値を $(variable) 参照できます。

CSV 入力データをテスト エンジン間で分割する

既定では、Azure Load Testing は、入力ファイルをコピーしたまま変更せずに、すべてのテスト エンジン インスタンスで処理します。 既定で、各テスト エンジンでは CSV ファイル全体を処理します。 または、Azure Load Testing では、CSV 入力データをすべてのエンジン インスタンスに均等に分割することができます。 複数の CSV ファイルがある場合、各ファイルが均等に分割されます。

たとえば、大きな顧客 CSV 入力ファイルがあり、ロード テストが 10 個の並列テスト エンジンで実行される場合、各インスタンスは顧客の 10 分の 1 を処理します。

重要

AZURE Load Testing では、CSV ファイルを分割するときにヘッダー行は保持されません。

  1. CSV ファイルの読み取り時に変数名を使用するように JMeter スクリプトを構成します。
  2. ロード テストに追加する前に、CSV ファイルからヘッダー行を削除します。

入力 CSV ファイルを分割するようにロード テストを構成するには:

  1. ロード テストの [テスト計画] タブに移動します。

  2. [Split CSV evenly between Test engines]\(テスト エンジン間で 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>