この記事では、Azure Load Testing を使用してテスト スクリプトでコンマ区切り値 (CSV) ファイルからデータを読み取る方法について説明します。 外部 CSV ファイルのデータを使用して、JMeter または Loggert テスト スクリプトを構成可能にします。 たとえば、CSV ファイル内のすべての顧客を反復処理して、顧客の詳細を API 要求に渡すことができます。
JMeter では、テスト スクリプトの CSV データセット構成要素 を使用して、CSV ファイルからデータを読み取ることができます。 ラゴでは、テスト スクリプトで CSV ファイルを開き、必要なデータを読み取り、要求に渡すことができます。
Azure Load Testing で外部ファイルからデータを読み取る場合は、ロード テストのテスト スクリプトと共に外部ファイルをアップロードする必要があります。 複数の並列テスト エンジン インスタンス間でテストをスケールアウトする場合は、これらのインスタンス間で入力データを均等に分割することを選択できます。
GitHub からサンプル プロジェクトを複製またはダウンロードすることから始めます。
前提条件
- アクティブなサブスクリプションを持つ Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- Azure ロード テスト リソース。 ロード テストのリソースを作成するには、「ロード テストの作成と実行」を参照してください。
- Apache JMeter テスト スクリプト (JMX) または子スクリプト。
- (省略可能)テスト スクリプトを作成する Apache JMeter GUI。 Apache JMeter をインストールするには、「Apache JMeter はじめに」を参照してください。
CSV データを読み取るためにテスト スクリプトを更新する
このセクションでは、外部 CSV ファイルを参照するようにテスト スクリプトを構成します。 CSV データ セット構成要素を使用して、CSV ファイルからデータを読み取る。
重要
Azure Load Testing では、JMX ファイルとすべての関連ファイルが 1 つのフォルダーにアップロードされます。 JMeter スクリプトで外部ファイルを参照する場合は、テスト スクリプトにファイル パス参照がないことを確認します。
JMeter ベースのテストの場合は、Apache JMeter GUI を使用して JMeter スクリプトを変更します。
テスト スクリプトで CSV データ セット構成 要素を選択します。
ファイル名情報を更新し、ファイル パス参照を削除します。
必要に応じて、テスト エンジン間で CSV ファイルを分割するときに、[ 変数名] に CSV フィールド名を入力します。
AZURE Load Testing では、CSV ファイルを分割するときにヘッダー行は保持されません。 ヘッダー行を使用する代わりに、 CSV データ セット構成 要素に変数名を指定します。
スクリプト内のすべての CSV データセット構成 要素について、前の手順を繰り返します。
JMeter スクリプトを保存し、ロード テストにスクリプトをアップロードします。
ローカストベースのテストの場合は、好みのエディタを開いて、ローカストスクリプトを更新します。
ファイルを開くセクションで、 ファイル名 情報を更新し、ファイル パス参照を削除します。
Locustスクリプトを保存し、スクリプトをロードテストにアップロードします。
あなたのロードテストにCSVファイルをアップロードする
テスト スクリプトから外部ファイルを参照する場合は、これらのファイルをすべてテスト スクリプトと共にアップロードしてください。 ロード テストが開始されると、Azure Load Testing はすべてのファイルを各テスト エンジン インスタンス上の 1 つのフォルダーにコピーします。
重要
AZURE Load Testing では、CSV ファイルを分割するときにヘッダー行は保持されません。 ロード テストに CSV ファイルを追加する前に、ファイルからヘッダー行を削除します。
Azure portal を使用してロード テストに CSV ファイルを追加するには:
Azure portal で Azure ロード テスト リソースに移動します。
左側のウィンドウで [テスト] を選択して、テストの一覧を表示します。
チェック ボックスをオンにして一覧からテストを選択し、[編集] を選択 します。
[ テスト 計画 ] タブで、コンピューターから CSV ファイルを選択し、[ アップロード ] を選択してファイルを Azure にアップロードします。
URL ベースのロード テストを使用している場合は、[変数 ] 列に コンマ区切りのリストとして変数名を入力できます。
CSV ファイルのサイズが 50 MB を超える場合は、ファイルを zip 圧縮します。 zip ファイルのサイズは 50 MB 未満にする必要があります。 Azure Load Testing では、テストの実行中にファイルが自動的に解凍されます。 各 zip のファイルが最大 1000 個で、圧縮されていない合計サイズが 1 GB の zip アーティファクトは 5 つだけです。
[ 適用] を選択してテストを変更し、再実行時に新しい構成を使用します。
ヒント
URL ベースのロード テストを使用している場合は、 $(variable)
構文を使用して、HTTP 要求の CSV 入力データ ファイルの値を参照できます。
テスト エンジン間で CSV 入力データを分割する
既定では、Azure Load Testing は、入力ファイルをコピーしたまま変更せずに、すべてのテスト エンジン インスタンスで処理します。 既定では、各テスト エンジンは CSV ファイル全体を処理します。 または、Azure Load Testing を使用すると、CSV 入力データをすべてのエンジン インスタンスに均等に分割できます。 複数の CSV ファイルがある場合、各ファイルは均等に分割されます。
たとえば、顧客の CSV 入力ファイルが大きく、ロード テストが 10 個の並列テスト エンジンで実行されている場合、各インスタンスは顧客の 1/10 分の 1 をプロセスします。
重要
AZURE Load Testing では、CSV ファイルを分割するときにヘッダー行は保持されません。
- CSV ファイルを読み取るときに変数名を使用するようにテスト スクリプトを構成します。
- ロード テストに追加する前に、CSV ファイルからヘッダー行を削除します。
入力 CSV ファイルを分割するようにロード テストを構成するには:
トラブルシューティング
テストの状態が失敗しており、テストログにFile {my-filename} must exist and be readable
が含まれています。
ロード テストが失敗状態で完了したら、 テスト ログをダウンロードできます。
テスト ログに File {my-filename} must exist and be readable
エラー メッセージが表示された場合、テスト スクリプトの実行時に入力 CSV ファイルが見つかりませんでした。
Azure Load Testing では、すべての入力ファイルがテスト スクリプトと共に格納されます。 テスト スクリプトで入力 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>