負荷テストについて
負荷テスト(ロードテスト/ラッシュテスト)はシステムに負荷をかけて、性能や耐久性等を評価するために実施されるテスト手法のことです。今回、負荷テストで20年以上使われている歴史のあるJMeterをご説明します。
JMeterについて
JMeterは、Apacheソフトウェア財団によってJavaで開発されたオープンソースソフトウェアで、システムの性能測定に広く利用されています。
実際にJMeterを使用するには、Java8以降が必要です。Javaがインストールされていない場合は、公式ページ(https://www.java.com/ja/download/)等からインストールが必要です。
Javaインストール後は、JMeter公式ページ(https://jmeter.apache.org/download_jmeter.cgi)からダウンロードして使用ください。
JMeterでの負荷テスト
JMeterを使用して、WebサイトやWebアプリケーションの負荷テストを実施するためには、以下のような手順が必要です。
テスト計画の作成
テスト計画を作成するために、JMeter配下のbinディレクトリにあるファイル(Windows:jmeter.bat、Linux:jmeter)からJMeterをGUIモードで起動してください。
JMeter起動後は、新規テスト計画が開いた状態になります。このテスト計画をわかりやすい名前に変更する等してテスト計画を作成していきます。
テスト計画のスレッドグループ追加と設定
作成したテスト計画を右クリックして、スレッドグループ(追加 > Threads > スレッドグループ)を追加します。
スレッドグループは、テスト計画で以下の項目を制御する設定を指します。
※スレッド数:送信リクエスト数
※Ramp-up期間:設定したスレッド数を何秒間で送信するか
※ループ数:設定スレッド数を送信する回数
スレッド数×ループ回数が、スレッドグループで送信されるリクエスト数の合計です。
Ramp-up期間の中で送信するため、スレッド数やループ数が多すぎるとJMeterを実行している端末のリソースが枯渇し、フリーズする可能性が高くなります。
直観的にわかりにくいかと思いますが、具体的には以下のような例となります。
例)スレッド数:100、Ramp-up期間:100、ループ数:1をスレッドグループに設定した場合
「100」のスレッド数を「100」秒の間で「1」回実行しますので、1秒に1回リクエストが送信されることになります。
テスト計画のサンプラー追加と設定
作成したスレッドグループを右クリックして、サンプラー(追加 > サンプラー > HTTP リクエスト等)を追加します。
サンプラーは、対象サーバへのリクエストを送信する以下のような設定を指します。
※プロトコル:httpやhttps
※サーバ名またはIP:リクエストを送信する対象
※ポート番号:リクエストを送信するポート番号
※メソッド:GET、POST等のHTTPメソッド
※パス:URLパス
テスト計画のリスナー追加と設定
作成したテスト計画を右クリックして、リスナー(追加 > リスナー > 結果を表で表示等)を追加します。
リスナーは、テスト計画の実行結果を用途に応じた形式で表示することが可能です。
表形式の他、グラフ形式やツリー形式、集計レポートや概要レポート等、様々な出力形式があります。
負荷テストの対象システムによって、HTTPクッキーマネージャ(設定エレメント)や条件に応じた処理をするロジックコントローラの追加が必要が、ここでは割愛します。
ここまででテスト計画を作成することができましたので、保存ボタン等からわかりやすい名前でファイルを保存してください。ファイルを保存した後は、GUIモードで起動したJMeterを終了してください。
テスト計画の実行
作成したテスト計画を実行する時、GUIモードでは実行環境の資源を多く使用してしまうことで正確な結果が得られない可能性があります。
以下のようなコマンドラインからテスト計画を実行することが、正しい使い方です。
コマンドライン例)jmeter -n -t テスト計画ファイルパス -l 実行結果ログファイルパス -e -o HTMLレポート出力先ディレクトリ
実行結果の確認
テスト計画を実行した後は、出力先のHTMLレポートを確認したり、JMeterをGUIモードで起動後にテスト計画で追加したリスナー(結果を表で表示等)から結果を確認することができます。対象システムへの負荷テストの評価としてご利用ください。
最後に
歴史があり利用者の多いツールとして、JMeterについてご説明しました。
Javaの導入が必要であったり、テスト計画のシナリオ作成がわかりにくかったりと少し難しいと感じることもありますが、使い方を覚えると役立つ場面が多いと思います。
JMeter以外にも以下のようなツールの他にSaaS等のサービスが存在しますので、興味のある方は試してみてください。
・Apache Bench
・Gatling
・Locust
・k6