負荷テスト実行中に JMeter パラメータ値を動的に変更
みなさまお疲れ様です。さて、当ブログでシリーズでお届けしております CA BlazeMeter チュートリアルですが、前回(CA BlazeMeter で JMeter テストを実行 - SaaSでいこう!なブログ)までで、いわゆる Hello World レベルまで漕ぎ着けましたので、今回はTips的なことを書いてみたいと思います。
JMeterの変数(プロパティについて)
JMeterはスクリプトの中に変数を定義できます。${ABC}のような感じに書きます。変数の中でもプロパティというのがあり、${__P(ABC)}と書きますが、このABCの値をコマンドライン実行時引数でスクリプト外部から与えることができます。もしこの値をテスト実行中に動的変更できれば、例えば「ターゲットスループット」の値をプロパティにしておき、実行中に徐々にスループットを高めていくことで、性能キャパシティの上限を容易に見つけることができます。
私の知る限りJMeter単品ですと実現が難しいと思うのですが、CA BlazeMeterであればいとも簡単に実現できますのでご紹介します。
1.JMeterスクリプト(JMX)にターゲットスループットを設定
JMeter で JMXを開き、「定数スループットタイマ」を追加します。下図は、前回記事(CA BlazeMeter の Chromeプラグインで JMeter スクリプト(JMX)を速攻で生成 - SaaSでいこう!なブログ)でレコーディング生成したJMXを JMeter 3.2で開いています。
ターゲットスループット(サンプル数/分)の欄に、${__P(HITS)}と入力(アンダーバーは2回連続で)
2.編集後の JMeterスクリプトを CA BlazeMeter にアップロード
下図のように CA BlazeMeter にアップロードおよび設定をします。
(※この画面の出し方や設定の意味が判らない方(いきなりこのページにジャンプしてこられた方)は、過去記事(CA BlazeMeter の Chromeプラグインで JMeter スクリプト(JMX)を速攻で生成 - SaaSでいこう!なブログ)で解説していますのでそちらを参照ください)
今回はSandBoxを使いましょう。これなら無償アカウントのテスト実行回数は消費されません。(という話について詳しくは過去記事:無償アカウントの制限 - SaaSでいこう!なブログを参照)
3.CA BlazeMeter のオプション設定で、JMX内のプロパティを設定
「JMeter Properties」をクリック
KEY欄にHITS、VALUE欄に6.0を入力し、「Apply」クリック
これはつまり、初期値は 6ヒット/分/スレッド(スレッド=バーチャルユーザだと思ってください)のターゲットスループットで負荷テストがスタートすることになります。あとで実行中にこの値を5倍にしてみて変化を見てみたいと思います。
これで設定終わりです。「Save」をお忘れなく。
4.負荷テスト実行
実行モニタを見ていると、だいたい「2ヒット/秒」前後のスループットになっています。さっき 6 で設定したのに何故?かというと、
- 先ほどの設定は「/分」 → ここでの表示は「/秒」
- 先ほどの設定は1VUあたり → ここでは全VUの合計(20VUで実行中)
という違いがあるからです。換算すると、
6 × 20VU ÷ 60s = 2 (hits/s)
ということで、目論見どおりのスループットになっております。
5.ターゲットスループット値をテスト実行中に動的変更
テスト実行中(テスト期間3分ですから急いでくださいね!)に、「Remote Control」をクリック
ポップアップが表示されますので、初期値「6.0」を、5倍の「30.0」に書き換えて「Send」をクリック
実行モニタを見てみると・・・
確かにターゲットスループットが動的変更されたことがわかります。ちなみにスループットが5倍になっても応答時間(右グラフのオレンジ線)には変化がないことから、性能キャパシティはまだ充分にある、と判断できそうですね。
今回はパラメータ動的変化の一例としてターゲットスループットを取り上げましたが、JMeter はプロパティ変数をいたるところで使えるわけですから、いろいろな応用が可能ですね。