負荷試験をやっていると、
他人の状態を保持して、
その状態に応じて処理を行うということがある。
たとえば、
- 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ループなどを組み合わせることで、
もっと複雑な処理が可能になる。
以上です。
まあ、小ネタだね。