JMeterの各値を外部ファイル参照にするTips

直近JMeterを利用して性能測定したが、外部設定を参照する機能が乏しく、結局ほとんど手書きになってしまった。 外部パラメータファイル化に関して知見ができたので、Tipsで残す。

外部ファイルのデータを読み出す

CSV Data Set Config を使う

  • 外部CSVを読み、ヘッダ行と同じ名前の変数に各行の値を入れて後続処理を続けるconfig
  • スレッドが1つ回るごとに1行進む。スレッドごとの行の勧めかたや共有は設定可能。複数スレッドが同時に次ループに突入しえる場合、採番のしかたはランダムになる
  • 一番楽な外部読み出し

FileToString 関数

下記でテキストデータを丸々取得できる

${__FileToString(path/to/textfile)}

BeanShellSamplerやListener、Preprocessorで頑張る

下記は、JSONファイルを読み込んで 1 階層目を逐次変数に設定する例。

import net.minidev.json.*;
import java.util.Map.Entry;
import java.nio.file.*;

String jsonFile = "./config.json";

Path file = Paths.get(jsonFile);
String text = Files.readAllLines(file).join("\r\n");

JSONObject jsonObj = (JSONObject) JSONValue.parse(text);

for (Entry<String, Object> entry : jsonObj.entrySet()){
    vars.put(entry.getKey(), entry.getValue());
}

変数・Function

スレッド番号の取得

// ctx.getThreadNum() によりスレッド番号取得可能。番号は0始まり、1刻み増加。
String varName = "id-thread-" + ctx.getThreadNum();
vars.put("id", vars.get(varName));

値の二重評価

vars.put("id", "123");
vars.put("sql1", "UPDATE sometable SET status=10 WHERE id=${id};");
${__V(${sql1})}

上記は、sql1 が一度_V()により展開され、一番外の ${}によりもう1度評価され ${id} が展開される。