負荷試験をやっていると、

他人の状態を保持して、

その状態に応じて処理を行うということがある。

 

たとえば、

  • 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ループなどを組み合わせることで、

もっと複雑な処理が可能になる。

 

以上です。

まあ、小ネタだね。

コメントがあればどうぞ


CAPTCHA Image
Reload Image