javaさえあればOSに依らず動かせる負荷テストツールjMeterについて紹介します。
全く経験ゼロの僕が2日半で自社製品の負荷テストコードを書けるようになるくらい取っつきやすいです。
事前準備
- JMeterを用意する。
- javaを用意してPATHを通す。(Java 8 or 9)
※一部機能を使うためには、更に必要なものが出てくるかもしれません。
・HTTPSの記録をするにはJREでなくJDKを使う。(公式曰くJDKのkeytoolを使うとのこと)
・詳細はGet Startedをご参照ください。
起動用のファイル説明
(windows用起動ファイル)
・jmeter-n.cmd -> JMXファイルを用いてCUI起動
・jmeter-t.cmd -> JMXファイルを用いてGUI起動
・jmeterw.cmd -> JMXファイルなしでGUI起動(プロンプトなし)
テスト編集する場合はGUI起動、テスト実行する場合はCUI起動しろと公式が(以下略)
※ちなみにコマンド詳細は下記コマンドで出てきます。
$ jmeter.bat -?
(windows)
$ jmeter.sh -?
(linux)
【プロジェクト名】.jmxファイル、JMeterテスト実行ファイル
【プロジェクト名】.logファイル、JMeter実行ログ
【プロジェクト名】.jtlファイル、テスト実行レポートファイル
基本的な操作
Test Plan作って、Thread Group内でテストシナリオ作成。
HTTPプロキシサーバーを使ってから微調整するのが楽ではあるが、
Thread Groupを右クリック>Add>Sampler>HTTP Requestで
GETやPOSTをオラオラ書いて作ることもできる。
言語の変更
日本語に変えたければ、
左上メニュータブ>Options>Choose Language
で設定できます。
パラメータ説明
[Test Plan]
・Run Thread Groups consecutively (one at time): 複数スレッドグループを連続実行するかどうか。オンにすると順番に実行、オフにすると並列で同時実行する。
・Run tearDown Thread Groups after shutdown of main threads:
・Functional Test Mode:
[Thread Group]
・Number of Threads (users): 生成するスレッド数
・Ramp-Up Period (in seconds): 何秒でMaxのスレッド数に到達させるか。
逆数とって1/(Ramp-Up Period)で、
1秒あたりの何個のスレッドを生成するかの速度と思えば、
多少理解しやすくなる気がする。
・Loop: 設定したテストを何回試行するか。
・Delay Thread creation until needed: スレッドを同時で生成するか、タイミングをずらしながら生成するか。
このオプションがオフだと、テスト時のスレッドごとに行うHTTPメソッドがある時刻に一点集中する。
HTTPプロキシサーバーでブラウジングを記録する
FireFoxでの例を載せておきます。
https://www.mozilla.org/ja/firefox/new/
1. JMeter側の設定
Add>Logic Controller>Recording Controller
Add>Non-test Elements>HTTP(s) Script Recorder
HTTP(s) Script Recorderで、空いてるポート番号と作ったRecording Controllerを指定してスタートしておく。
2. Web Browser側の設定 (今回はFireFox)
FireFoxを起動して、
オプション(もしくは歯車マーク)>一般>ネットワーク設定>接続設定
下記のように設定する。
localhost内でブラウジングする場合は、プロキシなしで接続にあるlocalhostを外す。
OK押して、適当にブラウジングしたらJMeter側でのHTTPリクエストが記録されているはず。
外部ファイルからの読み込み
テキスト等で文字列の読み込み、CSV読み込みができます。(他にもあるかも)
.jmxファイルからの相対パス指定もできます。
今回はJMeter内で使用する変数を、User Parametersで定義して使用します。
Add>Pre Processors>User Parameters
下記のように、${hostname}などで使用することができる。
responseのHTMLから文字列を抽出する
Add>Post Processors>XXXX Extractorで、
responseのHTMLから正規表現で文字列抽出できる。(下記はXPathを使って抽出する例)
selenium driverを使用する
Options>Plugin Managerをクリックして、
Available Pluginのタブで、
jpgc、Selenium/WebDriver Support をインストールする。
Add>Config Element>jp@gc - XXXX Driver Configを追加しておく。
jsを組み込む
そのうち。
JMeter上で出力されるレポートについて
※[ 注意事項 ]※
.jtlファイルを読み込んでJMeter上の各種レポートに出力するのですが、
読み込みごとに追記形式で追加されていくので、
不要であればほうきマークのClearで削除してください。
ここの仕様を理解していないと、統計レポートで不要な情報混じったりしてハマります。(ハマりました)
まとめ
使い方によっては、相手側のサーバーを落としてしまい
相手側から攻撃と捉えられてしまうかもしれません。
使い方には気を付けましょう。