JMeterについてもう一歩進んでみる

以前 JMeterについて調べてみた - oknknicの日記 で、JMeterの基本中の基本の操作について書いた。
今回は、もう一歩進んで、実際に利用する際の視点で書いてみる。

WEBアプリ負荷テストの観点

  • ユーザ数
    • 同時リクエスト数
    • 同時ログインユーザ数
    • 連続稼働時間
  • ネットワークの太さ
    • JMeterを実行するPC(1台で複数ユーザ担当)に接続されているLANの太さ
    • クライアントPCから計測対象までのネットワークの太さ、物理距離

JMeterでできること

  • 複数のリクエストを一気に送出できる
    • 一台のマシンからマルチスレッドで
    • 複数台のマシンを1台のマシンから操作して
  • 多様な種類のリクエストを送出できる
  • 複数のリクエストを時系列で組み合わせることができる
    • 単純な繰り返しや、ログイン→業務処理→ログアウトなど
    • タイミングも設定可能
  • テストシナリオをWebブラウザの操作から生成できる
  • その他細やかな設定ができる
    • パラメータ渡し
    • 認証(※ダイジェスト認証非対応)
    • トランザクショントーク
    • セッション管理方法(HTTPクッキーマネージャ等)
  • 多様な形式で結果表示できる
  • 上記の一連の設定内容を「テスト計画」として保存できる

基本的な設定

  • スレッド数:想定される同時アクセス数
  • Ramp-Up期間(秒):1
  • 無限ループ:ON
  • 設定エレメント
    • HTTPリクエスト初期設定 で リクエスト間で共通的な設定
  • リスナー
    • 通常は「統計レポート」でリクエストごとの統計情報を取得
    • 各リクエストの詳細を見たい場合は「結果を表で表示」
    • パフォーマンスの時間的変化を見たい場合は「グラフ表示」(※右肩上がりの場合は、負荷に耐えられていないと解釈できる)

複数台のマシンからリクエストを送出する

ノートPC1台で同時送出できるリクエストは、マシンの性能を考えると50〜100程度のよう。
そのため、それ以上のリクエストを同時に送出したい場合は、複数台のマシンを連携させて用いる。
(※厳密には同時ではない。厳密に同時にするにはサーバサイド側にも小細工が必要である)
設定方法は、ざっくりいうと下記の通り。

詳細な手順は下記の通り。
1. コントロールされる側n台でjmeter-serverを起動
    binで下記を実行。(※jmeter-serverはrmiregistryを起動するため、jre以下のrmiregistryにパスが通っている必要がある)

jmeter-server

2. コントローラのマシンで、コントロール対象のマシンを登録
    bin/jmeter.propertiesを下記のように編集。

remote_hosts=192.168.30.1,192.168.30.2

3. コントローラのマシンでJMeterを起動
4. メニュー>実行>全て開始(リモート)

ログイン→処理→・・・→ログアウト を計測する

ロジックコントローラを用いる。⇒参考サイト:4. ロジックコントローラ | TECHSCORE(テックスコア)

ブラウザ操作によるシナリオ生成

JMeterのプロキシ機能を利用することで、ブラウザでの操作をシナリオとして保存することができる。
1. スレッドグループに記録コントローラを追加(ロジックコントローラ>記録コントローラ)
2. ワークベンチにプロキシサーバを追加(追加>Non test エレメント>HTTPプロキシサーバ)
3. 「対象となるコントローラ」を「スレッドグループ>記録コントローラ」に設定し、開始ボタンを押下
4. WebブラウザのプロキシをJMeterに設定する(※「ローカルアドレスにはプロキシサーバを使用しない」をOFF、例外サイトから対象アドレスを外しておくこと)
5. JMeterで記録コントローラを選択した状態で、Webブラウザで対象の操作を行う

ユーザやパスワードを外部ファイルから読み込ませる

1. ユーザパラメータの追加(前処理>ユーザパラメータ)
2. 変数の値に関数「${_StringFromFile(userId.txt)}」などを記入。変数は${変数名}で参照可能