JMeterのインストール
前提
- JRE 8以上がインストールされていること
- Apache TomcatがExample付きでインストールされていること
- HTTP(S) Test Script Recorderによるテストプランの記録用
- JMeterの実行に必須ではない
- Windows環境を想定
ダウンロード・起動確認
JMeterのダウンロードページから最新のリリースをダウンロードする
任意のフォルダに解凍し「bin」配下の「jmeter.bat」を起動する
上記のような画面が開けばとりあえずOK
※テストプラン作成はGUIモード、最終的な負荷テストの実行はCLIモード行う
初期設定
日本語化
以下のようにすれば日本語化は可能
※ただし完全ではないし訳が微妙な部分もあるため任意(この後の説明では日本語化はしない)
メニューバーより [Options] > [Choose Language] > [Japanese] と選択する
※JMeterを起動するたびに設定が必要、常に日本語で起動する場合は後述のようにbatファイルを作成する
日本語で起動した場合
常に日本語で起動したい場合は「jmeter.bat」と同じフォルダに以下のように「jmeter_ja.bat」を作成、実行する
rem 言語・国を設定する
set JVM_ARGS="-Duser.language=ja"
rem JMeterを起動する
jmeter.bat
ルック・アンド・フィールの変更
メニューバーより [Options] > [Look and Feel] > 好みのLook and Feelを選択
※変更後はJMeter再起動を求められるため適宜再起動する
この記事では以降は「CrossPlatform」を使用する
メモリ割当
公式ページの記載のとおり環境変数「HEAP」を設定することで割当の変更が可能
なお「jmeter.bat」をみると以下のように記載がありデフォルト値が確認できる
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
)
テストプランの作成と実行
JMeterを使用してApache Tomcatのexampleアプリに対して負荷をかける単純なテストプランを作成する
想定シナリオ
- Apache Tomcat の Examples ページを開く
- JSP Examples をクリックする
- Functions > Execute をクリックする
- パラメータを変更して「送信」をクリックする
事前準備
「HTTP(S) Test Script Recorder」を用いて操作を記録するにあたりブラウザのプロキシ設定を「localhost:8888」に変更する
Chromeを使用している場合は拡張機能の「Proxy SwitchyOmega」をインストール・設定しておくと切り替えが容易
設定画面より[New Profile] > [Proxy Profile]からこんな感じでJMeter記録用のプロファイルを設定しておくとよい
切り替えはChromeの右上のアイコンから
記録にノイズ(他サイトへの通信)が混ざらないよう作成したJMeter記録用のプロファイルを使用したSwitch Profileとするのもよい
テストプランの作成・記録
テストプランの作成
JMeterを起動しメニューバーから[Templates]を選択する
テンプレートは「Recording」を選択し[Create]
パラメータを以下のように変更し[Create]
設定名 | 値 |
---|---|
hostToRecord | XXX(作業端末のIPアドレス) |
recordingOutputFile | record.xml (変更なし) |
schemeToRecord | http |
テストプランのひな型が作成される
今回はTomcatにアクセスするためHTTP Request DefaultsのPort Numberは「8080」を設定しておく
レコーダの起動
HTTP(S) Test Script Recorderを選択し[START]
※HTTP(S) Test Script Recorderがグレーアウト(無効化)されていても記録はできる模様
※CA関連のメッセージが出るがとりあえず無視して[OK]
次のようなダイアログが表示されればレコーダは起動している
想定シナリオの実施
-
Apache Tomcat の Examples ページを開く
※レコーダを経由するようlocalhostではなくIPアドレス指定でアクセスする -
JSP Examples をクリックする
- Functions > Execute をクリックする
- パラメータを変更して「送信」をクリックする
実施後の画面
実施が完了したらレコーダを停止する
Thread Group > Recording Controller配下にリクエストが記録されている
テストプランの修正・保存
記録されたままだとTransaction ControllerやHTTP Requestの名前が結果を表示した際に分かりにくいため適宜変更する
変更後例
変更が完了したらテストプラン実行前に保存をする
テストプランの実行1
まずは作成したシナリオを検証するためそのまま(実行回数1)実行する
View Result Treeにリクエストの結果が表示される
各リクエストが1度のみ実行されている
※本来はここでのレスポンス結果等をもとにリクエストの成否を判定するAssersionを追加していくがここでは割愛
このままではレスポンスタイム等が分かりずらいためAggregate Reportを追加し再実行する
これは各リクエストやトランザクション毎のレスポンスタイムの最小・最大・平均等を一覧化するもの
再実行した結果をAggreate Reportで確認
全て数msで完了していることが確認できる
テストプランの実行2
次に多数のリクエストを発生させてみる
Thread Groupを選択し以下のように値を変更し保存・実行する
※以下の場合10並列で各100回トータル1000回シナリオを実行するイメージ
設定名 | 値 | 意味 |
---|---|---|
Number of Threads (users) | 10 | スレッド数(=仮想ユーザ数・同時アクセス数) |
Ramp-up period (seconds) | 10 | 全てのスレッドが出そろうまでの時間(この値÷スレッド数の時間ごとに新たなスレッドが起動) |
Loop Count | 100 | 各スレッドが何度シナリオを繰り返すか |
実行結果をAggreate Reportで確認
とくにエラーもなく応答速度も良好
テストプランの実行3
最後はCLIモードでテストプランを実行する
GUIの場合は結果表示等の負荷がかかる分、JMeter実行端末がボトルネックとなりえるため実際のテストはCLIモードで行う
JMeterのGUIを閉じてbinフォルダ下で以下を実行する
※JMeterインストール先フォルダに「testplans」「results」フォルダを作成、テストプランは「testplans」に保存しておくこととする
jmeter -n -t "..\testplans\Test Plan.jmx" -l ..\results\log.jtl -e -o ..\results\report
詳細は公式ページ参照だがオプションはざっくり以下の意味
オプション | 意味 |
---|---|
-n | CLIモードで実行 |
-t "ファイル名" | テストプランファイルを指定 |
-l "ファイル名" | テスト結果ファイルを指定(中身はCSVのため拡張子「.csv」でもよい) |
-e | レポートを出力する |
-o "フォルダ名" | レポート出力先フォルダ |
実施結果
レポートの確認
先ほどCLIモードで実行時に出力されたレポートを確認する
サマリ情報やレスポンスタイムのパーセンタイルグラフなどが参照可能
※見方はまで勉強中
終わりに
JMeterは業務でも何度か使用しているが、こうして整理しようとすると満足に説明できない・理解が足りていない点が多々あるなぁ、と実感する
引き続き今度はもう少し的を絞ったトピックを追加していきたいと思う。