JMeterの「一度だけ実行されるコントローラー(Once Only Logic Controller)」の動作

JMeterの「一度だけ実行されるコントローラー」の動作が不思議だったので、報告。
原因を特定するためにソースまで見たかったけど、まだ見れていません。

  • 利用したJMeterのバージョン
    • [1]2.3.2 r665936
    • [2]2.3.4 r7855646


一度だけ実行されるコントローラーとは何か?

一度だけ実行されるコントローラ(Once Only Controller)はその全ての子要素を1回だけ実行します。全ての繰り返し処理でセッション(ログイン情報など)を共有したい場合などに利用します。
http://www.stackasterisk.jp/tech/engineer/jmeter02_03.jsp


さて、では以下のようなシナリオがあった場合にはどうなるのか。

各スレッドグループ(サンプル1、2、3、4)にあるループコントローラーはループ回数を3にしています。
また、サンプル4のループコントローラーのループ回数は1にしています。


さて、想定であれば、画像にあるHTTPリクエスト-2の(1)(2)(3)(4)は共に1回しか呼ばれないはず。
しかし実際はどうなるかと言うと、以下のとおり。
※[1]2.3.2の場合、[2]2.3.4の場合

  • (1)[1]:1回、[2]:1回
  • (2)[1]:2回、[2]:1回
  • (3)[1]:2回、[2]:1回
  • (4)[1]:3回、[2]:3回


どうも(4)の作りの場合、一度だけ実行すると言う行為を忘れて指定ループ回数だけリクエストを実行する模様。
例えば、今回はループ回数を3にしていますがこれをループ回数を6にしたら、6回リクエストが呼ばれます。


ただ、ループコントローラの配下に新たにシンプルコントローラを設置すると動作は変化し以下のようになります。

  • (5)[1]:2回、[2]:1回


「一度だけ実行されるコントローラー」は便利なコントローラーではありますが、上記のように設置の仕方次第では、1回以上実行されるので注意が必要です。
※特にJMeterのバージョンが2.3.2の場合は危険です。


時間があれば、自分で修正したいところですな・・。