Apache JMeter: パフォーマンスと負荷テストツール
I. Apache JMeterの紹介
Apache JMeterは、Apache Software Foundationによって開発されたオープンソースのツールで、ウェブアプリケーション、API、データベース、その他多くのプロトコルのパフォーマンステストと負荷テストに使用されます。
当初、JMeterはウェブアプリケーションのテスト用に設計されましたが、その後、さまざまなサービスをサポートする無料ツールとして、ソフトウェアテストコミュニティで広く普及しました。
II. Apache JMeterの主な機能
1. 負荷テスト(Load Testing)
同時に数千人の仮想ユーザーをシステムにシミュレートして、システムの負荷耐性をテストします。
2. 多くのプロトコルのサポート
JMeterは、異なる条件下でのレスポンスタイム、スループット、リソース使用率、その他の指標を測定します。サポートされているプロトコルには以下が含まれます:
- HTTP, HTTPS(ウェブとモバイル)
- SOAP, REST(API)
- FTP, TCP, SMTP, IMAP(メール)
- JDBC(データベース)、WebSocket, JMS, LDAP など
3. マルチスレッド(Multithreading)
異なるテストシナリオを個別のスレッドで並行して実行できます。
4. 詳細なレポート
レスポンスタイム、スループット、エラー数、その他重要な統計情報をグラフィカルなレポートとして提供します。
5. 拡張性
機能を強化するためのプラグインを追加でき、DevOpsやCI/CDツールと良好に統合できます。
III. Apache JMeterのアーキテクチャ
1. テストプラン
JMeterのテスト構成を定義するもので、Thread Group、Samplers、Listeners、およびその他の設定要素を含みます。
2. スレッドグループ(Thread Group)
仮想ユーザー数(スレッド)をシミュレートし、テストシナリオを実行します。
3. サンプラー(Samplers)
テスト中にサーバーへリクエストを送信するために使用され、HTTP、FTP、JDBCなど、さまざまなプロトコルをサポートします。
4. タイマー(Timers)
リクエスト間に待機時間を追加し、ユーザーの実際の行動をシミュレートします。
5. アサーション(Assertions)
サーバーからのレスポンスが正しいことを保証し、レスポンスデータの正確性を検証します。
6. リスナー(Listeners)
テスト結果をデータ収集し、グラフやレポートで表示します。
IV. Apache JMeterの制限
1. ユーザーインターフェース(UI)
UIは使いやすいものの、複雑なテストシナリオを視覚的に管理する際に限界があります。
2. 大規模テスト時のパフォーマンス制限
数百万人のユーザーをシミュレートする大規模テストでは、CPUやRAMリソースを大量に消費し、性能に影響が出る可能性があります。
3. UIテストの非対応
JMeterは主にバックエンドのテストを対象としており、ユーザーインターフェースを伴うアプリケーションのテストには適していません。
V. Apache JMeterの実際の使用例
ウェブサイトの負荷テスト: 数千人のユーザーが同時にウェブサイトにアクセスし、システムのレスポンスタイムと負荷耐性を評価します。
APIの評価: APIに多数のリクエストを送信し、安定性とレスポンスタイムをチェックします。
データベースのテスト: SQLクエリやデータベース操作のパフォーマンスを評価します。
VI. Apache JMeterのインストール
Apache JMeterはJavaで書かれているため、JMeterを実行する前にJREまたはJDKをインストールする必要があります。
公式ウェブサイトにアクセスして、Apache JMeterをダウンロードしてください。
ダウンロードしたZIPファイルを解凍します。
binフォルダにアクセスし、ApacheJMeter.jarファイルをダブルクリックしてJMeterを起動します。
アプリケーションのインターフェース。
VII. Googleの負荷テストのガイド
1. スレッドグループの作成
Test Planを右クリックし、「Add → Threads (Users) → Thread Group」を選択します。
Thread Group内のパラメータ:
Number of Threads (users)
仮想ユーザーの数を設定し、同時にサーバーにリクエストを送信します。
Ramp-Up Period (seconds)
全てのスレッドが完全に起動するまでの時間(秒)を設定します。
例:スレッドが10個、Ramp-Up時間が100秒の場合、10秒ごとに1スレッドが起動します。
Loop Count
各スレッドがThread Group内の全サンプラーを実行する回数を設定します。
「Forever」を選択すると、テストが終了するまで無限にループします。
Scheduler
スケジューラを有効にし、Thread Groupの開始および終了時間を設定します。
Duration (seconds)
スケジューラを有効にした場合、Thread Groupが実行される時間を設定します。
Startup Delay (seconds)
テスト開始後、Thread Groupが開始するまでの遅延時間を設定します。
Action to be taken after a sampler error
サンプラーのエラー時に取るアクション:
- Continue: スレッドを継続して実行。
- Start Next Thread Loop: サンプラーをスキップして、次のスレッドループを開始。
- Stop Thread, Test, Test Now: スレッドを停止し、テスト全体を中止。
この例では、10人のユーザーが1秒でリクエストを実行し、1回のみ実行されます。
2. リクエストの作成
GoogleにHTTPリクエストを送信するためのHTTPリクエストを作成します。データベースの場合はJDBCリクエスト、メールの場合はSMTPリクエストなどを使用します。
HTTPリクエストのパラメータ:
Server Name or IP
リクエストを送信するウェブサーバーのホスト名またはIPアドレス。
例:www.example.comまたは192.168.1.1
Port Number
ウェブサーバーがHTTPリクエストをリッスンするポート番号。入力しない場合、デフォルトはHTTPは80、HTTPSは443です。
Protocol
HTTPリクエストに使用するプロトコル。デフォルトはHTTPです。SSL接続の場合はHTTPSを使用できます。
Method
HTTPリクエストに使用するメソッド:
- GET: サーバーからリソースを取得します。
- POST: データをサーバーに送信します。
- PUT: 新しいリソースをアップロードまたは既存のリソースを置き換えます。
- DELETE: リソースを削除します。
- HEAD, OPTIONS, PATCH,…
Path
サーバー上のリソースのパス。
例:/api/v1/userまたは/login
Content Encoding
コンテンツのエンコーディングタイプ。通常はUTF-8を使用します。
Parameters
HTTPリクエストに含めるパラメータのリスト。通常、GETまたはPOSTメソッドに使用されます。
Body Data
HTTPリクエストのボディに送信するデータ。通常はPOSTで使用されます。
Files Upload
HTTPリクエスト内でファイルをアップロードする場合に使用します。
3. Listenerを追加して結果を表示
全スレッドの結果を表示
Thread Groupを右クリック → Add → Listener → Summary Reportを選択します。
各スレッドの結果を表示
テストを実行
結果:
例:
- リクエスト数:10。
- 平均:Googleが応答するのにかかる平均時間は325msです。
- 最小:Googleが応答するのにかかる最短時間は283msです。
- 最大:Googleが応答するのにかかる最長時間は379msです。
- エラー率:エラーのあるリクエストは0%です。
結果を削除し、Number of Threads (Users) = 100で再実行します。つまり、100人のユーザーが同時にGoogleページを読み込みます。
結果:
100人のユーザーが同時にリクエストを送信すると、10人のユーザーで実行した場合よりも応答にかかる時間が長くなります。
VIII. 結論
Apache JMeterは、さまざまなアプリケーションのパフォーマンスと負荷テストを行うための優れたツールです。システムの能力を評価するための高コストをかけることなく使用できるため、多くの組織にとって最適な選択肢です。
いくつかの制限はありますが、JMeterは拡張性があり、サポートコミュニティも活発なため、多くのテストプロジェクトで優先的に使用されています。
Apache JMeterについてさらに詳しく知りたい場合は、公式サイトを参照するか、ChatGPTで学習することができます。
![]() | Nguyễn Đặng Nhật Minh Developer |