Apache JMeter の AbstractJavaSamplerClient を拡張した自作サンプラにパラメータを渡したかったのだけれど、いろいろなやり方があって、どれが有効なのかよくわからないので整理してみる。
TL;DR
- 同じ種類の Config Element が複数ある場合
- User Parameters は Test Plan > Thread Group
- User Defined Variables は Test Plan < Thread Group
- 異なる種類の Config Element が混在するる場合
- User Parameters > User Defined Variables > Test Plan
実験
こんな構造にした:
+- Test_Plan
| +- User_Parameters_0
| +- User_Defined_Variables_0
| |
| +- Thread_Group_1
| | +- User_Defined_Variables_1
| | +- User_Parameters_1
| | +- Java_Request_1
| |
| +- Thread_Group_2
| +- Java_Request_2
|
+ WorkBench
複数の Config Elements 上で同じ名前のパラメータを定義しておき、どの値が採用されるかを調査した。
結果
TP | UP0 | UDV0 | + | UP1 | UDV1 | JR1 | + | JR2 |
---|---|---|---|---|---|---|---|---|
✔ | ✔ | + | ✔ | UP0 | + | UP0 | ||
✔ | ✔ | + | ✔ | UDV1 | + | UDV0 | ||
✔ | + | TP | + | TP |
(くたびれた、あとでかく)
参考実装
import (省略)
public class UserParameterReportSampler extends AbstractJavaSamplerClient {
@Override
public void setupTest(JavaSampleContext arguments) {
arguments.getParameter("TheParameter");
JMeterVariables variables = JMeterContextService.getContext().getVariables();
variables.get("TheParameter");
}
@Override
public SampleResult runTest(JavaSamplerContext context) {
SampleResult result = new SampleResult();
result.sampleStart();
JMeterVariables variables = JMeterContextService.getContext().getVariables();
result.setSamplerData(variables.get("TheParameter"), null/*encoding=DEFAULT*/);
result.setSuccessful(true);
result.sampleEnd();
return result;
}
}
remote_host に異なるパラメータを渡したい
各々のJMeter Server が同期して動作するだけ。単純に2倍とかの負荷がかかるだけ。サーバごとに異なるパラメータを渡してくれるなんていう気の利いたことはしてくれない。
サーバごとに異なる設定を仕込みたい場合
JMeter-Serverの起動パラメータで -JserverID=001
のように指定すると、その文字列を User Parameters から ${__P(serverID)}
のように参照できる。
サーバごとサンプリングごとに異なる設定を仕込みたい場合
CSV Import を使う。各サーバを起動したディレクトリにある CSVファイルを読むので、各サーバに異なる内容のファイルを置いておく。
まとめ。
よくわからん……。とりあえず User Defined Variables を使っておこう。