負荷試験をやっていると、
他人の状態を保持して、
その状態に応じて処理を行うということがある。
たとえば、
- AさんがBさんに友達の申請をする
- BさんがAさんの友達申請を許可する
という場合など。
これをjmeterで試験する場合、
「BさんがAさんの友達申請を許可する」という処理は、
「AさんがBさんに友達の申請をする」が完了していないと成功しない。
そのためには、BさんはAさんの状態を取得する必要がある。
ここで、
AさんのIDを1
BさんのIDを2
とし、
jmeterのBSF(javascript)を使うと、
<(PostProcesser)AさんがBさん友達申請をする>
// 自分のID
var my_id = 1;
// 他人のID
var other_id = 2;
// レスポンスを取得 して申請が成功しているなら
// Bさんの情報にAさんが申請したことを記録
var key = "appley-to-" + other_id;
var value = my_id;
props.put(key, value);
<(PreProcesser)BさんがAさんの友達申請を許可する>
// 自分のID
var my_id = 2;
// 他人のID
var other_id = 1;
// BさんがAさんからの申請状態を取得
var key = "appley-to-" + my_id;
while (true) {
var value = props.get(key);
if (value != void(0)) {
// 申請状態がとれたら、ループを抜ける
break;
}
}
// 許可処理を実行
という具合になる。
注意点としては、
jmeterが起動中は、
propsの値は常に保持されるので、
不要になったら、removeしておく必要がある。
もしくは、初期化処理でremoveしてから利用するなど。
もう1つ注意点としては、
永久ループで待機する場合は、
スレッドを停止しても処理が停止しないので、
何回かループしたら止めるとかを入れておいた方がよい。
あとは、カウンタとか、forEachループなどを組み合わせることで、
もっと複雑な処理が可能になる。
以上です。
まあ、小ネタだね。