最初に
以前にMac に負荷テストツール JMeter をインストールする方法という記事で JMeter をインストールしました。 今回は実際にテストケースを作成して負荷テストをどのように行なったのか紹介できればと思います。
前提条件
- JMeter がインストール済み
テストケース作成
前回の起動したところから始めていきます。
Test Plan を右クリックして Add > Threads(Users) > Thread Group
をクリック
Thread Group が追加されると思うので設定をしていきます。
ここで設定するのは赤枠で囲った 3 つの箇所
- Number of Threads(users): 非同期でリクエスト投げる数
- Ramp-up period(seconds): どれくらいの時間までに指定のリクエストを投げるのか
- Loop Count: 1 スレッドが繰り返して投げるリクエストの数
なので例えば
- Number of Threads(users): 30
- Ramp-up period(seconds): 300
- Loop Count: 300
とすると 5 分間で 30 x 300 = 9000 リクエストを投げるという設定になります。
ここはどれくらいの負荷でテストしたいかに合わせて変更してください。 1 日のアクセス数とかが参考になるかと思います。
ここで大量のスレッドを 1 台の PC で立てすぎてしまうと場合によってはフリーズする可能性があるそうです。
回避策として同じ画面内の Delay Thread creation until needed
にチェックをしておくと良いそうです。
続いて実際に負荷をかけるページの設定を行いたいと思います。
Thread Group を右クリックして Add > Sampler > HTTP Request
をクリック
ここで設定するのは主に 5 つとなる
- Protocol [http]
- Server Name or IP
- HTTP Request
- Methods
- Path
- Parameters
Google 検索のリクエストを作成して確認する
Google 検索のリクエストを例に作成してみようと思います。
各値を埋めていくために自分ががよくやる方法を紹介したいと思います。
まず google chrome の検証ツールを使います。 https://www.google.co.jp/ に移動します。 今回は参考に google のページで行なっていますが、任意の負荷をかけたいページで行なってください。
この JavaScript を無効にする操作は基本的に不要
検証ツールを開いてまずページ上の JavaScript を無効にします。(基本的なサービスでこの操作は不要) ※google 検索特殊で JavaScript 有効状態での検索した際リクエストメソッドが表示されない通信が発生していました。分かりにくかったので無効にして通常のリクエストメソッドでやり取りして頂きます。 検証ツールから JavaScript の無効はこの記事が参考になります。 chrome の javascript を一時的に無効化
あとは検証ツールの Network タブを開いた状態で任意の検索ワードを入力して検索します。
すると負荷テストを行いたいページのリクエストの情報が表示されるので入力していきます。
- Protocol [http]: https
- Server Name or IP: www.google.co.jp
- HTTP Request
- Methods: GET
- Path: search
- Parameters: q=test&gbv=1&sei=e3OeZPXIO_yd0-kPlJG_mAQ
※パラメータはコピーして Add from Clipboard
を押すと Name, Value をいい感じで入力してくれます。
必要な値を入力するとこんな感じになります。
サイトによってはリクエストヘッダーが必要な場合があります。
その際は Test Plan を右クリックして Add > Config Element > HTTP Header Manager
をクリックすると設定が追加されます。あとは HTTP Request の設定と同様に検証ツールに表示される値を入力してください。
今回は不要なため省略します。
負荷テストの結果を表示
Thread Group を右クリック Add > Listner > View Results Tree
をクリック
これで先ほど作成した負荷テストを実行した際にここに実行結果が表示されるようになりました。
負荷テストの実行は左上緑の三角アイコン(Start)をクリック
今回は 5 回リクエストを投げるように設定しました。
リクエストは 200 が返り成功のように思えますが、
Response Body
を確認して期待した値が返る事を確認します。
そうでないとぱっと見はリクエスト成功に見えてもリクエストヘッダーやパラメータが不足していて期待したリクエストが投げられておらず、負荷テストとして測れてない場合があります。
これで負荷テストが動作して結果も返ることが確認出来ました。
CUI モード(NON GUI mode)で負荷テストを実行
テストを実際に実行して結果を表示するところまで行いました。 ただ本番の負荷テストでは Apatch は GUI モードでのテストを推奨してないそうです。
なので先ほど作成したテストを保存して 作成したテスト.jmx
ファイルを用意します。
そしてコマンドラインから実行します。 ※パスは jmeter をダウンロードしたパスに合わせて変更してください。自身の環境ではデスクトップに置いてあるので下記のパスになっています。
-n
: これは非 GUI モードを指定します。-t
: これは実行するテスト計画の JMX ファイルへのパスを指定します。-l
: これは結果を保存する場所を指定します。この場合、結果は JTL 形式で保存されます。
~/Desktop/apache-jmeter-5.5/bin/jmeter -n -t ~/Desktop/apache-jmeter-5.5/bin/templates/google-search.jmx -l ~/Desktop/results.jtl
実行すると results.jtl
ファイルが指定した箇所に生成される。結果を確認するには JMeter の View Results Tree
の Browse
で生成されたファイルを開くことで結果を確認出来ます。
CUI で出力された結果には Response Body
にデータ等が記載されていないので注意が必要です。これは実行時の負荷を軽減するために意図的に保存しないようになっていると思われます。
なのでデフォルトではそれらの結果を保存しないようになっています。
保存して確認したい場合は下記のであらかじめ有効にしておく必要があります。 apache-jmeter-5.5 > bin フォルダ内の jmeter.properties
という設定ファイルの下記の欄を true
に変更することで保存されるようになります。
jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.responseHeaders=true jmeter.save.saveservice.responseData=true
最後に
これで JMeter のインストールから負荷テスト実施まで一通り行う事が出来ました。実際の負荷テストでは上記の作成方法に従って、5 分間で 9000 リクエストを投げて特に問題なくレスポンスが返ってきているのを確認出来たのでよかったです。最後まで読んでいただきましてありがとうございました。