LoginSignup
5
7

More than 5 years have passed since last update.

初心者でもできる、JMeterでの負荷テスト

Posted at

javaさえあればOSに依らず動かせる負荷テストツールjMeterについて紹介します。
全く経験ゼロの僕が2日半で自社製品の負荷テストコードを書けるようになるくらい取っつきやすいです。

事前準備

  1. JMeterを用意する。
  2. 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を指定してスタートしておく。
image.png

2. Web Browser側の設定 (今回はFireFox)

FireFoxを起動して、
オプション(もしくは歯車マーク)>一般>ネットワーク設定>接続設定
下記のように設定する。

image.png

localhost内でブラウジングする場合は、プロキシなしで接続にあるlocalhostを外す。
OK押して、適当にブラウジングしたらJMeter側でのHTTPリクエストが記録されているはず。

image.png

外部ファイルからの読み込み

テキスト等で文字列の読み込み、CSV読み込みができます。(他にもあるかも)
.jmxファイルからの相対パス指定もできます。

今回はJMeter内で使用する変数を、User Parametersで定義して使用します。
Add>Pre Processors>User Parameters

image.png
image.png

下記のように、${hostname}などで使用することができる。
image.png

responseのHTMLから文字列を抽出する

Add>Post Processors>XXXX Extractorで、
responseのHTMLから正規表現で文字列抽出できる。(下記はXPathを使って抽出する例)
image.png

selenium driverを使用する

Options>Plugin Managerをクリックして、
Available Pluginのタブで、
jpgc、Selenium/WebDriver Support をインストールする。
Add>Config Element>jp@gc - XXXX Driver Configを追加しておく。

jsを組み込む

そのうち。

JMeter上で出力されるレポートについて

※[ 注意事項 ]※
.jtlファイルを読み込んでJMeter上の各種レポートに出力するのですが、
読み込みごとに追記形式で追加されていくので、
不要であればほうきマークのClearで削除してください。
ここの仕様を理解していないと、統計レポートで不要な情報混じったりしてハマります。(ハマりました)

まとめ

使い方によっては、相手側のサーバーを落としてしまい
相手側から攻撃と捉えられてしまうかもしれません。
使い方には気を付けましょう。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7