その他

【 JMeter, Groovy, PreProcessor 】一定時間ごとにファイルデータを一行ずつbodyに渡してリクエストする

その他
この記事は約3分で読めます。

前提環境など

  • MacOS
  • ファイルから取り込むやり方に特化
  • HTTPリクエストのシナリオのみ

※ JMeterのインストール

1. シナリオ作成

シナリオの前提:
5秒おきにファイルデータを1行ずつbodyに渡してをリクエストするテスト

  • スレッドグループ → 追加 → サンプラー → HTTPリクエスト
  • HTTPリクエスト → 追加 → 前処理 → JSR223 PreProcessor
  • HTTPリクエスト → 追加 → 設定エレメント → カウンタ
  • HTTPリクエスト → 追加 → タイマ → 定数タイマ

2. HTTPリクエスト

  • プロトコルを設定する
  • サーバ名を設定する
  • ポート番号を設定する(必要であれば)
  • リクエストメソッドを設定する
  • パスを設定する
  • ボディ名に${変数}にする。

3. カウンタ

  1. 増分を設定する
    今回は1行ずつなので「1
  2. 参照名を設定する
    参照するための変数名になる。

4. 定数タイマ

  • スレッド遅延時間(ミリ秒)を設定する 今回は5秒おきなので「5000

5. JSR223 PreProcessor

  • スクリプトの言語を選択する 今回は「Groovy

ここではGroovyの説明はしない。
Javaから派生した言語だから似てるそうな。
似てるかまでは検証していない。

開発環境

JSR223 PreProcessorは、言うたらエディタのこと。
ぶっちゃけ使いにくいのでvscodeで書いた方がいい。

vscodeのCodeRunnerって拡張機能入れてデバッグしながら
やると良い。

スクリプト

// ファイルを読み込む
def src = new File("/User/hoge/Documents/test.txt")

// 「カウンタ」を取得する
// vars.get("変数名")でJMeterにある変数を取得できる
def counter = vars.get("row")

// データを一行ずつ読み込む
// line = データ, no = 行数
src.eachLine{ line, no ->
  if (no == counter) {
    // リクエストbodyの変数へデータを代入する
    vars.put("body_data", line)
  }
}

6. ループ数を設定して実行

スレッドグループのループ数に応じてカウンタの変数が増えていくので、
ファイルのデータが一行ずつ読まれてリクエストされる。
 

結論

読み込むファイルサイズがあまりにも大きかったり、
ループの間隔が極端に短い場合はこの方法は使えないかも。

でも PreProcessor を使えば
色々なテストパターンを再現できそうな感じはある。