JMeter 負荷テストチュートリアル
JMeterロードテストの概要
すべてのウェブアプリケーションには最大負荷容量があり、それを超えると遅延やエラー、全体的な非効率が発生する可能性があります。負荷テストはウェブアプリケーションのパフォーマンスを評価する上で非常に重要です。この種のテストは、特に大量のユーザートラフィックを処理することが期待されるウェブアプリケーション、サイト、またはAPIを扱う場合に、ソフトウェアおよびアプリケーション開発ライフサイクルの重要な要素です。ピーク時または持続的な高トラフィック条件下でアプリケーションが正常に動作できることを保証するために、パフォーマンステストツールを使用することが不可欠です。Apache JMeterはこの目的に人気のある選択肢であり、パフォーマンステストが初めての方は「JMeterとは何か?」「JMeterはどのように機能するのか?」という疑問を持つかもしれません。ここではJMeterとJMeterを使ったパフォーマンステストについて見ていきます。
負荷テストとは何か?
負荷テストは、ウェブアプリケーションが通常およびピーク時負荷条件の下でどのように振る舞うか、あるいは破損点を見つけるためのパフォーマンステストの一種です。これはソフトウェア、ウェブサイト、ウェブアプリケーション、API、またはシステムに対して実際の使用(負荷)をシミュレートし、応答性、劣化、スケーラビリティなどの要素を分析・特定する実践方法です。
負荷テスト用ツール
負荷テストツールは、負荷テストのニーズを効率化し、デジタルパフォーマンスを向上させるために非常に重要です。今日の市場には、さまざまな機能を持つ多数のツールやプラットフォームが無限に存在しています。負荷テストツールには以下のようなものがあります:
-
- LoadView
- Apache JMeter
- WebLOAD
- LoadRunner
- Tricentis NeoLoad
- LoadNinja
本ガイドでは、JMeter負荷テストに注目します。JMeterとは何か、JMeter負荷テストのやり方、JMeterを使ったAPIパフォーマンステストの方法などの質問に答えます。
JMeter負荷テストとは?
Apache JMeter(通称JMeter)は、機能動作の負荷テストおよびパフォーマンス評価用に設計された100%純粋なJavaアプリケーションとして広く使われているオープンソースソフトウェアです。豊富なドキュメント、強力なコミュニティサポート、確立されたベストプラクティスにより、開発者やソフトウェア開発チームの間でパフォーマンステスト用の優先ツールとなっています。さらに、無料でオープンソースであることからコスト効率が高い選択肢ですが、100%Javaであるため、テストプロセスの開始に追加の時間とリソースが必要になることがあります。
JMeterはHTTP、HTTPS、FTPなどの多様なプロトコルをサポートし、さまざまな種類のアプリケーションのテストに対応できる柔軟性があります。ユーザーは、ユーザー操作のシミュレーション、サーバーパフォーマンスの監視、応答時間の分析など、さまざまなシナリオを定義したテストプランを作成・実行できます。
JMeter負荷テストは機能動作の負荷テストおよびパフォーマンス測定を目的としています。ウェブアプリケーションやサービスのパフォーマンスを分析・測定するのにJMeterを使用できます。収集したデータを分析しレポートを生成することで、アプリケーションの振る舞いを観察し、パフォーマンスのボトルネックを特定、改善が必要な部分を把握する貴重な洞察を提供します。
なぜJMeterを使うのか?
- オープンソース:JMeterは完全無料で、開発者はソースコードを利用できます。
- プラットフォーム独立:JMeterは100%Javaで、複数のプラットフォーム上で実行可能です。
- マルチプロトコル対応:JMeterはウェブアプリケーションのテストおよびデータベースサービスのパフォーマンスをサポートし、HTTP、JDBC、LDAP、SOAP、JMS、FTPなどの基本プロトコルをカバーします。
- 記録&再生:JMeterはブラウザ上のユーザー活動を記録し、それをシミュレートして再生できます。
- カスタマイズ可能なレポート:チャート、テーブル、ツリービュー、ログファイルなど多様な形式でテスト結果を可視化できます。
- コミュニティサポート:支援、ガイド、チュートリアルが豊富な大規模コミュニティがあります。
- 拡張性:プラグインで機能拡張が可能で、利用者はツールを自分のニーズに合わせて調整できます。
JMeter負荷テストの利点
JMeterは負荷テストに優れたツールで、多くの利点がありテスターに人気があります。まず無料でオープンソースなので、予算の制約を気にせず誰でも利用可能です。加えて、多様な負荷条件下でのアプリケーションの動作を明確に示すリアルなシナリオのシミュレーション能力が強力です。
JMeterの最大の魅力の一つはスケーラビリティです。小規模なテストから大規模トラフィックのシミュレーションまで問題なく対応できます。また、その詳細なレポーティングおよび解析機能により、パフォーマンス問題を早期に特定し、アプリケーションの最適化と滑らかな稼働を容易にします。
JMeterのもう一つの強みは使いやすさです!複雑なテストシナリオの作成にコードの専門知識は不要で、シンプルかつ直感的に操作できます。さらに、内蔵されたレポートおよび可視化機能により、テスト結果の分析やパフォーマンスボトルネックの特定が簡単です。総じてJMeterは信頼性が高く使いやすいツールで、アプリケーションが様々な負荷に耐えるかを保証します!
JMeterでの負荷テストの実施方法
JMeterを使った負荷テストの手順と基本的なテストの設定方法を見てみましょう。
ステップ1: JMeterインストールのためのシステム互換性の確認
JMeterのインストールを進める前に、システムが要件を満たしていることを確認することが重要です。JMeterはJavaベースなので、システムにJava 8以上がインストールされている必要があります。お使いのOSがJMeterに対応しているかも確認しましょう。JMeterはWindows、Linux、macOSなど様々なOSで動作します。
基本要件を満たしていることが確認できたら、JMeterのインストールを進めることができます。これによりスムーズなセットアップと最適なパフォーマンスが保証されます。
ステップ2: システムに合わせたJMeterのダウンロードとインストール
システム要件が満たされたら、最新のJMeterバージョンをダウンロードします。用途に応じてバイナリ版またはソースファイルを選択可能です。バイナリファイルはあらかじめコンパイル済みで即実行可能、ソースファイルは手動で構成・コンパイルする柔軟性を提供します。通常はバイナリ版がインストールしやすいため好まれます。.zipや.tgzなどのファイルフォーマットがあります。
希望のバージョンをダウンロードしたら、開いて指定の場所に移動するか、新しいフォルダを作成します。抽出作業に数分かかる場合があります。OSによってインストール手順は異なりますが、一度インストールされればJMeterの機能は共通です。
ステップ3: 負荷テストプランの作成
JMeterユーザーはゼロから負荷テストプランを作成するか、ファイルのドロップダウンメニューから多様なテンプレートの中から選択可能です。テンプレートにはSOAP WebService Test Plan、基本および高度なWeb Test Plan、FTPテストプラン、機能テストプランなどがあり、必要な要素、セクション、フィールドが含まれています。
テストプランを作成するには、ファイルメニューから新規作成を選ぶかツールバーの新規ボタンをクリックします。テストプランを作成するにはJMeterをGUIモードで実行する必要があることに注意しましょう。CLI(コマンドラインインターフェース)はテストの実行に使います。続いては、負荷テストのユーザー数(スレッドグループ)を指定する方法について説明します。
ステップ4: JMeterでスレッドグループの追加と設定
スレッドグループを追加するには次の手順を踏みます:テストプラン上で右クリックし、Threads(Users)にカーソルを合わせ、Thread Groupをクリックします。
表示されるThread Groupダイアログボックスで、スレッドプロパティ(スレッド数=ユーザー数、ランプアップ期間=起動遅延秒数、ループカウント=テスト繰り返し回数など)を編集できます。さらに遅延やテスト開始・停止時刻、サンプラーエラー時の対応などを指定可能です。スレッドプロパティは以下の通りです:
-
- スレッド数:サーバーに接続する仮想ユーザーの数を表します。
- ランプアップ期間:指定のスレッド数を実行状態に移行させるまでの時間(秒)です。
- ループカウント:各スレッドがタスクを実行する回数です。
- 無限ループ設定(Loop Count Infinite):有効化するとループ回数を無視し、手動停止まで無限ループになります。
- 必要に応じてスレッド作成を遅延させる機能:指定秒数までスレッド作成を遅延できます。
- スケジューラー:有効化すると特定時刻にテストをスケジュール設定可能です。
このステップにより、同時接続数、テスト期間、条件の細かいカスタマイズが可能になります。
ステップ5: JMeterでサンプラーの設定
JMeterのサンプラーは異なる種類のリクエスト送信を可能にします。例としてはHTTPリクエスト(ウェブサイトやアプリ、API用)、FTPリクエスト、SMTPリクエスト、TCPリクエストなどがあります。ここで、プロトコル(HTTP/S)、サーバー名またはIP、パス(特定のウェブページ)、GETやPOST、HEAD、PUTなどのリクエストタイプを入力します。これはAPI負荷テストにも利用できます。
ステップ6: リスナーの設定
JMeterでサンプラーの結果を分析するには、次にリスナーを設定します。テストプランウィンドウからはSummary Report、Aggregate Graph、View Results Tree、View Results in Tableなど多くのリスナーが選択でき、複数追加も可能です。これでテストプランが完成し、テストの実行ができます。
ステップ7: 負荷テストスクリプトの録画
基本的なHTTPまたはプロトコルレベルの負荷テストであれば、追加設定は不要です。しかしユーザーの操作に近いテストを行いたい場合は、JMeterのHTTP(S) Test Script Recorderを使用する必要があります。
スレッドグループにRecording Controllerを追加すると、サイトやアプリの操作をHTTP/Sリクエストとして記録できます。ページごとに複数のRecording Controllerが配置可能で、手動で一つずつリクエストを追加する手間が省けます。
ただし、記録はHTTP/Sリクエスト単位であり、ユーザー視点のリアルなブラウザ内での記録ではありません。ブラウザの録画はJMeter Proxy Serverでも可能ですが手間が多く難しいです。より簡単に直感的な方法を望むなら、LoadViewのEveryStep Web Recorderを使うとよいでしょう。本レコーダーはリアルブラウザを使ったポイント&クリックのスクリプト作成を提供し、JMeterの複雑な設定作業を省けます。
ステップ8: 負荷テストの実行
すべての詳細と設定を終えたらテストプランを保存し、ツールバーの実行ボタンを押せばテストが開始します。より良い結果を得るにはCLIモードでの実行をお勧めします。
ステップ9: 負荷テスト結果の確認
結果はテーブル形式で表示されますが、選択したリスナーにより異なります。結果には、時間(ミリ秒)、ステータス(有効な応答やエラーの表示)、送信バイト数や受信バイト数、レイテンシ、接続時間などの詳細な指標が含まれます。これらの結果を分析することで、エラーの場所や負荷時間の遅延部分を特定できます。
JMeterを使ったAPIロードテストの方法
前項ではJMeterでプロトコルベースの負荷テストをウェブサイトやアプリケーションに設定する手順を説明しました。ここでは、SOAPやREST APIなど、さまざまなAPIをJMeterでテストする方法に焦点をあてます。インストールやセットアップの手順は前述のステップと一致しますが、APIテストの基本的な考え方や重要な留意点について解説します。
JMeterを使ったREST APIテスト
RESTful API(Representational State Transferの略)は多様なウェブサービス開発に不可欠です。SOAP APIと異なり、RESTはプロトコルではなくURI(Uniform Resource Identifier)とHTTPプロトコルに依存するアーキテクチャスタイルです。
ステップ1: 負荷テストプランの作成
JMeterを開くと新規のテストプランウィンドウが表示されます。すでにJMeterを開いている場合は、メインツールバーの新規ボタンから新しいテストプランを作成可能です。
ステップ2: スレッドグループの追加と設定
前節と同様に、スレッドグループウィンドウでユーザー数(スレッド)、ランプアップ時間、テスト繰り返し回数(ループカウント)を設定し、多数プロパティを編集できます。
ステップ3: サンプラーの設定
次にサンプラーを追加します。JMeterには事前構成済みサンプラーもあり、きれいにセットアップ済みのものを選ぶことも可能です。ここでは例として事前構成済みのHTTPリクエストを使います。
Thread Groupを右クリックし、AddからSamplerを選択します。APIテストではHTTP Requestを選択し、設定ウィンドウが開きます。ここでテスト名やREST APIテストのパラメータを設定します。HTTP Requestウィンドウは基本設定と高度な設定に分かれていますが、ここでは基本設定に注力します。設定可能なフィールドにはプロトコル、サーバー名またはIP、ポート番号、HTTPリクエストの種類(GET/POST/HEAD/PUT/DELETEなど)、パラメータなどがあります。
まず、サーバー名またはIP欄にAPIのURL(ドメイン名のみ)を入力し、適切なプロトコルを選択、パス欄にAPIのパスを入力します。
GETリクエストならHTTPリクエストのリストからGETを選択します。
特定のパラメータがあればページなどをパラメータ欄に追加可能です。
パス欄にも入力可能ですが、パラメータ欄に入れるとURLエンコードやContent-Type、Include Equals?などの追加オプションが利用できます。
特定リクエストではリクエストヘッダーを含める必要があります。これにはテストプランのHTTP Requestを右クリックし、AddからConfig Elementを選択、HTTP Header Managerを追加します。HTTP Header ManagerでAPIのヘッダーを設定後、次のステップに進みます。
ステップ4: リスナーの追加
リスナーを追加するには、Thread Groupを右クリックしてAdd、Listenerを選びます。メニューから15種類以上のリスナーを選べます。代表的なのはView Results TreeやView Results in Tableです。グラフィカルなビュー(View Results Treeなど)はメモリやCPUを多く消費することに注意が必要です。リスナー追加後はテストプランを保存します。
ステップ5: テストの実行と結果の表示
設定と保存が済んだら、ツールバーの実行ボタンでテストを開始します。ウィンドウにサンプラーの結果が表示され、待機時間、応答コード、接続時間などの詳細・指標が見られます。
JMeterを使ったSOAP APIテスト
SOAP(Simple Object Access Protocol)はREST APIと異なり独自のプロトコルを持ちます。SOAP APIの負荷テストでは、セキュリティ・コンプライアンス、帯域幅要求(SOAPはより多くのリソースを要求しがち)、リトライロジック(REST APIにはない)など固有の考慮点があります。
ステップ1: 負荷テストプランの作成
JMeterはメニューやメインツールバーのテンプレートアイコンから多彩なテストプランテンプレートを提供しています。SOAP WebService TestPlanの作成を選ぶと対応したテストプランが生成され開きます。テンプレートにはプレースホルダー値が含まれており、適切なデータ入力が必要です。
ステップ2: データの入力
REST API構成と同様にユーザー数(スレッド)、ランプアップ期間、ループ回数を入力します。
メインスレッドグループのサブグループではHTTPリクエスト設定にアクセスでき、REST API設定同様ですが、SOAPリクエストボディが表示されます。HTTP Header ManagerやResponse Assertionsのセクションもあり、必要に応じてHTTP Authorization ManagerなどのConfig Elementsを追加可能です。
ステップ3: HTTPリクエストサンプラーの追加
SOAP APIの負荷テストにはHTTPリクエストサンプラーを追加します。ここでサーバー名またはIP、パス、HTTPリクエスト種類、ポート番号、SOAPリクエストのボディデータを入力します。
ステップ4: リスナーの追加
テストプラン構成後はリスナーを追加し、テスト結果の表示設定を行います。SOAP APIテストも自由に複数のリスナーを追加可能です。
ステップ5: テストの実行
テストプランの設定が完了したら、SOAP API負荷テストを実行し、終了後に結果を確認します。
まとめ
ここまでで、JMeterとは何か、JMeter負荷テストの方法、API用の負荷テスト実施方法について学びました。ご覧のとおり、JMeterでの負荷テスト設定は多段階で多くの構成オプションがあり、テストの実行よりも設定に時間がかかることがあります。JMeterは無料のオープンソースですが、より多くの機能を持ちビジネスニーズに合った他の負荷テストツールを検討する必要があるかもしれません。
LoadView: JMeterの最良の代替ツール
LoadViewは現在市場で利用可能な有料パフォーマンステストソリューションの一つで、多彩な機能を提供しています。これにはポイント&クリックスクリプトレコーダー、グローバルなロードインジェクターサーバーネットワークへのアクセス、およびさまざまな負荷カーブシナリオの設定機能が含まれており、柔軟なテスト設計が可能です。JMeterとは異なり、LoadViewでは追加のインフラや特別な考慮事項は不要で、すべてがスムーズに管理されています。JMeterがプロトコルレベルの負荷テストに限られるのに対し、LoadViewは実ブラウザを使用し、重要なサイト、アプリケーション、APIの実際のパフォーマンスを測定可能です。さらにLoadViewは、静的プロキシIPのホワイトリスト化やオンサイトエージェントの利用といった複数オプションを持ち、ファイアウォール内のアプリケーションのテストを可能にし、パフォーマンステストの柔軟性を向上させます。
LoadViewはユーザーフレンドリーなパフォーマンスレポートやダッシュボードを提供し、パフォーマンス低下の原因分析を明確に示します。加えて、ウェブページおよびウェブアプリケーションテスト用の参照動画も含まれており、レポートと直接比較してユーザー視点の可視化が可能です。LoadViewは柔軟な月額・年額プランを提供し、すべての顧客に24時間365日のサポートを提供している点が他のツールとの違いです。
負荷テストを次のレベルへ引き上げましょう
次のレベルへ
無限のスケーラビリティを備えた比類なき機能を体験してください。クレジットカード不要、契約不要。