Skip to main content

もっと人間らしく - タイマ

これまでのテスト結果を見てもわかる通り、複数のサンプラーあるいは繰り返しの処理では、間髪入れることなく次の処理が動いている。しかしながら実際に人がアプリケーションを操作する場合、それぞれの処理のあいだにはある程度の間隔が存在するはずだ。それを無視してテストを実行しても現実的な検証にはならない。そのあたりをシミュレートするのがタイマである。

JMeterが用意するタイマには以下の4種類がある。

定数スループットタイマ
各サンプラー実行のあいだで、指定された1分あたりのサンプラー実行回数にしたがって処理を待機する。
定数タイマ
各サンプラー実行のあいだで一定時間処理を待機する。
ガウス乱数タイマ
各サンプラー実行のあいだで指定されたガウス乱数で生成された時間だけ処理を待機する。
一様乱数タイマ
各サンプラー実行のあいだで指定された乱数で生成された時間だけ処理を待機する。

タイマもまたスレッドグループの下に追加する。するとスレッドグループの下に並んでいるすべてサンプラーのあいだで、タイマが指定する時間だけウェイトがかかる。具体的なタイマの動きを見るために、たぶん一番わかりにくそうな定数スループットタイマを例に取り上げてみよう。

タイマを追加するのも、ほかの要素と同様にスレッドグループを右クリックして、「追加」→「タイマ」から必要なタイマを選択する。定数スループットタイマであれば図16のようになる。

図16
定数スループットタイマ追加画面

定数スループットタイマの設定画面には「ターゲットスループット(ターゲット数/ミリ秒)」という項目があるが、これはおそらく翻訳の誤りである。実際に指定するのはミリ秒ではなく1分あたりのスループット数だ。すなわち1分間でテスト計画にあるサンプラーが何回実行できるかを指定する。「ターゲットスループット(ターゲット数/ミリ秒)」を「10」と指定すれば、60秒÷10=6秒、つまり各サンプラーのあいだに実行時間を含めて6秒の待機時間が入るというわけだ。

一応、この動作を確認してみよう。スループットという意味を持たせるために擬似サーバに一定のウェイトを入れる。たとえば

            PrintWriter pw = new PrintWriter(client.getOutputStream());
            Thread.sleep(3000);

のように各サンプラーの処理に3秒かかるようにしてみる。その上で定数スループットタイマの「ターゲットスループット(ターゲット数/ミリ秒)」の値を「10」と設定する。そうして擬似サーバに対して実行した結果を以下にあげる。

2005-08-30 21:38:02.656 127.0.0.1
GET /menu HTTP/1.1
Connection: keep-alive
User-Agent: Java/1.5.0_04
Host: 127.0.0.1
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: application/x-www-form-urlencoded
2005-08-30 21:38:08.656 127.0.0.1
GET /search?keyword=JMeter HTTP/1.1
Connection: keep-alive
User-Agent: Java/1.5.0_04
Host: 127.0.0.1
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: application/x-www-form-urlencoded

サンプラーの処理時間を含めて次の処理が6秒後に動いていることがわかる。