JMeter ロードテストチュートリアル



JMeter負荷テスト概要

すべてのWebアプリケーションには最大負荷容量があり、それを超えると遅延、エラー、または全体的な効果の低下につながることがあります。負荷テストはWebアプリケーションのパフォーマンスを評価する上で非常に重要です。この種のテストは、特に多くのユーザーアクセスが予想されるWebアプリケーション、サイト、APIにおいて、ソフトウェアおよびアプリケーション開発ライフサイクルの重要な一部です。アプリケーションがピークまたは持続的な高負荷条件で性能を発揮できることを確認するために、パフォーマンステストツールの使用が不可欠です。Apache JMeterはこの目的に人気のある選択肢であり、パフォーマンステストが初めての方は「JMeterとは何か?」、「JMeterはどのように動作するのか?」と疑問に思うかもしれません。ここではJMeterとパフォーマンステストにおけるJMeterの使い方を見ていきます。

負荷テストとは?

負荷テストはパフォーマンステストの一種で、通常およびピーク負荷時のWebアプリケーションの挙動や限界点を確認するためのものです。これは、実際の使用状況や負荷をソフトウェア、ウェブサイト、ウェブアプリケーション、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テストをCI/CDパイプラインに統合し、ビルドやデプロイ時にパフォーマンスチェックを実行しています。JMeterを使えばWebアプリケーションやサービスのパフォーマンスを分析・測定できます。収集したデータを分析しレポートを生成することで、アプリケーションの挙動を把握し、パフォーマンスのボトルネックを特定し、改善が必要な領域に関する貴重な洞察を得られます。

なぜJMeterを使うのか?

  • オープンソース:JMeterは完全に無料で、開発者はソースコードを利用できます。
  • プラットフォーム独立:JMeterはプラットフォームに依存せず、複数のOS上で動作可能です。
  • マルチプロトコル対応:JMeterはWebアプリケーションテストとデータベースサービスパフォーマンスの両方をサポートします。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テストプラン、機能テストプランなどのテンプレートを選択することもできます。これらテンプレートには負荷テストプラン作成に必要な特定の要素や欄が含まれています。

    テストプランを作成するには、[ファイル]から[新規]を選択するか、ツールバーの[新規]ボタンをクリックしてください。テストプランの作成はGUIモードで行う必要があります。CLI(コマンドラインインターフェース)は負荷テスト実行時に用います。次に、スレッドグループとも呼ばれる負荷テスト用ユーザー数の指定について説明します。
     

    ステップ4:JMeterでのスレッドグループの追加と設定

    スレッドグループを追加するには、テストプランを右クリックし、[Threads(Users)]にカーソルを合わせて[Thread Group]をクリックします。

    表示されるスレッドグループ設定画面で、スレッド数(ユーザー数)、Ramp-up期間(秒単位)、ループ回数(テスト反復回数)などのスレッドプロパティを設定できます。遅延やテスト開始・終了時間の指定、Samplerエラー時の動作設定も可能です。主なスレッドプロパティは次の通りです:

      • スレッド数:サーバーに接続する仮想ユーザーの数。
      • Ramp-Up期間:指定したスレッド数を稼働状態にするまでの時間。
      • ループ回数:各スレッドが実行するタスクの回数。
      • 無限ループ:有効にするとループ回数を無視し、手動停止まで無限ループ。
      • スレッド作成遅延:指定した秒数までスレッド作成を遅延。
      • スケジューラー:有効にすると特定時間でのテストスケジューリングが可能。

    この手順で、同時実行数や期間、テスト条件の細かなカスタマイズが可能になります。
     

    ステップ5:JMeterでのサンプラー設定

    JMeterのサンプラーは、HTTPリクエスト(WebサイトやAPI用)、FTPリクエスト、SMTPリクエスト、TCPリクエストなど、さまざまなタイプのリクエストをJMeterが送信するためのものです。ここで、プロトコル(HTTP/S)、サーバー名またはIP、パス(特定ページ用)、GET、POST、HEAD、PUTなどのリクエストタイプを指定できます。API負荷テストにも利用可能です。
     

    ステップ6:リスナーの設定

    JMeterのサンプラー結果を分析するためには、次にリスナーの設定を行います。JMeterテストプランウィンドウから、サマリーレポート、集計グラフ、結果ツリー表示、表形式結果表示などさまざまなリスナーを選択し、テスト結果を詳細に検査・分析できます。複数のリスナーをテストプランに追加可能です。これでテストプランが完成し、実行準備が整います。
     

    ステップ7:負荷テストスクリプトの録画

    基本的なHTTPまたはプロトコルレベルの負荷テストを行う場合は追加設定は不要ですが、ユーザーの操作に近いテストを行う場合は、JMeterのHTTP(S)テストスクリプトレコーダーを利用する必要があります。

    スレッドグループに録画コントローラーを追加します。これによりサイトやアプリケーションを操作し、HTTP/Sリクエストを録画できます。複数の録画コントローラーをページごとに追加できるため、手動でのリクエスト追加の手間を省けます。

    ただし、この録画はHTTP/Sリクエストレベルで行われ、実際のブラウザからのユーザー視点での録画ではありません。JMeterプロキシサーバーを使ってブラウザ録画も可能ですが、設定が煩雑で時間がかかります。より簡単で直感的な方法として、LoadViewのEveryStep Web Recorderを利用できます。LoadViewのレコーダーは実際のブラウザを使用し、複雑な設定なしにポイントアンドクリックでスクリプト作成が可能です。
     

    ステップ8:負荷テストの実行

    負荷テストの詳細設定が完了したら、テストプランを保存し、ツールバーの[実行]ボタンをクリックしてテストを開始します。より良い結果を得るために、CLIモードでの実行を推奨します。
     

    ステップ9:負荷テスト結果の確認

    リスナーによって異なりますが、テーブル形式でテスト結果が表示されます。結果には時間(ミリ秒)、ステータス(有効な応答やエラー)、送受信バイト数、レイテンシー、接続時間など追加のメトリクスが含まれます。これらを分析することで、エラー発生箇所や遅延の要因を特定できます。

    JMeterを使ったAPI負荷テストの方法

    前節ではJMeterを使ったプロトコルベースのWebサイトやアプリケーションの負荷テスト設定手順を見ました。ここではJMeterを使ったSOAPやREST APIなどの異なるAPIのテストについて説明します。インストールとセットアップは前述の手順と同様です。ここではAPIテストの基本と、JMeterを用いたAPIテストにおける主な注意点に焦点を当てます。
     

    JMeterによるREST APIテスト

    RESTful API(Representational State Transferの略)は多様なWebサービス開発で重要な役割を果たします。SOAP APIとは異なり、RESTはプロトコルではなくURI(Uniform Resource Identifier)とHTTPプロトコルに依存するアーキテクチャスタイルです。
     

    ステップ1:負荷テストプランの作成

    JMeterを起動し、新しいテストプランウィンドウが開かれます。既にJMeterを開いている場合はメインツールバーの[新規]ボタンから新規テストプランを作成できます。
     

    ステップ2:JMeterでのスレッドグループの追加と設定

    前節と同様にスレッドグループ画面でユーザー数(スレッド数)、Ramp-up時間、テスト反復回数(ループ回数)を設定し、多様なプロパティを編集します。
     

    ステップ3:サンプラーの設定

    続いてサンプラーを追加します。JMeterにはいくつかのプリセットサンプラーが用意されているほか、自作のサンプラーも選択可能です。ここではプリセットから選択します。

    スレッドグループを右クリックし、[追加]→[サンプラー]を選択するとサンプラー一覧が表示されます。APIテストには[HTTPリクエスト]を選び、テスト名設定やREST APIのパラメーターを設定します。HTTPリクエストウィンドウは基本設定と詳細設定に分かれていますが、ここでは基本設定に注目します。プロトコル、サーバー名またはIP、ポート番号、HTTPメソッド(GET/POST/HEAD/PUT/DELETEなど)、パラメーター等を設定可能です。

    API URLはサーバー名またはIPの欄にドメイン名だけを、パス欄にAPIのパスを入力します。

    GETリクエストの場合はHTTPリクエスト一覧からGETを選択します。

    パラメーターがある場合は、その値をパラメーターフィールドに入力します。また、パス欄に含めることも可能ですが、パラメーターフィールドに追加することでURLエンコードやContent-Type、Equals?の有無など追加の設定が可能です。

    要求ヘッダーが必要な場合は、テストプラン内のHTTPリクエストの右クリックメニューから[追加]→[設定要素]を選択し、[HTTPヘッダーマネージャ]を追加してください。HTTPヘッダーマネージャ画面でAPIのヘッダー情報を入力できます。設定が完了したら次のステップへ進みます。
     

    ステップ4:リスナーの追加

    スレッドグループを右クリックし、[追加]→[リスナー]を選択すると15以上の選択肢が現れます。よく使われるのは[結果ツリーの表示]や[表形式結果の表示]などです。グラフィカルなリスナーはメモリ・CPU消費が大きい場合があるため注意してください。リスナーを追加したらテストプランを保存します。
     

    ステップ5:テストの実行と結果の確認

    テスト設定と保存が完了したら、ツールバーの[実行]ボタンでテストを開始します。ウィンドウにサンプラーの結果が表示され、レイテンシー、応答コード、接続時間などの詳細情報が得られます。
     

    JMeterによるSOAP APIテスト

    SOAP(Simple Object Access Protocol)はREST APIとは異なり独自のプロトコルで動作します。SOAP APIの負荷テストではセキュリティ、コンプライアンス、帯域幅要件(SOAPは一般的にリソース要求が高い)、リトライロジック(RESTにはない)など固有の考慮事項があります。
     

    ステップ1:負荷テストプランの作成

    JMeterはメニューまたはメインツールバーのテンプレートアイコンから多様なテストプランテンプレートを提供しています。その中に「SOAP WebService TestPlanの構築」という選択肢があります。これを選択すると該当するテストプランが生成・開かれます。このテンプレートにはプレースホルダー値が含まれるため、適切なデータを入力してください。
     

    ステップ2:データ入力

    REST APIの設定と同様にユーザー数(スレッド)、Ramp-up期間、ループ回数(テスト反復)を入力します。

    メインスレッドグループの子グループ内でHTTPリクエスト設定にアクセスできますが、REST API設定とはレイアウトが異なり、SOAP APIリクエストボディがデフォルト表示されます。HTTPSヘッダーマネージャやレスポンスアサーションのサブセクションも含まれています。場合によってはHTTP認証マネージャなど追加の設定要素も加えられます。
     

    ステップ3:HTTPリクエストサンプラーの追加

    SOAP APIの負荷テスト用にHTTPリクエストサンプラーを追加します。ここでサーバー名またはIP、パス、HTTPリクエスト、ポート番号、SOAPリクエストの本文データを入力します。
     

    ステップ4:リスナーの追加

    テストプランを設定したら結果表示用のリスナーを追加します。必要に応じて複数追加可能です。
     

    ステップ5:テストの実行

    テストプランの設定が完了したら、SOAP API負荷テストを実行し、終了後に結果を確認します。

    まとめ

    ここまでにJMeterとは何か、JMeter負荷テストの実施方法、API負荷テストのやり方について学びました。ご覧の通り、JMeterで負荷テストを設定するには多様なステップと構成オプションがあり、テスト開始よりも準備に多くの時間を費やすことになりがちです。JMeterは無料のオープンソースソリューションである反面、より多機能でビジネスニーズに適した他の負荷テストツールの検討も必要かもしれません。

    LoadView:最高のJMeter代替ツール

    LoadViewは現在最も優れた有料パフォーマンステストソリューションの一つで、多彩な機能を提供しています。これにはポイントアンドクリックのEveryStepレコーダーグローバルに分散された負荷注入サーバーネットワークへのアクセス多様な負荷曲線シナリオ設定機能などが含まれます。JMeterと異なりLoadViewは追加インフラなしでシームレスに管理されます。JMeterはプロトコルレベルのテストに限定されますが、LoadViewは実ブラウザを利用し重要なサイト、アプリケーション、APIの実際のパフォーマンスを評価可能です。さらにLoadViewは、静的プロキシIPのホワイトリスト化やオンサイトエージェントの利用など、ファイアウォール内アプリケーションのテストを可能にする多様なオプションを提供し、パフォーマンステストの柔軟性を高めています。

    LoadViewはユーザーフレンドリーなパフォーマンスレポートとダッシュボードを提供し、パフォーマンス問題の原因を明確に把握可能です。また、WebページやWebアプリケーションテストのリファレンス動画も含まれ、レポートと比較してユーザー視点を視覚化できます。月単位や年単位の柔軟なプランと24時間365日サポートを全ての顧客に提供しており、市場の他のツールと異なる特徴となっています。

    ロードテストを
    次のレベルへ引き上げましょう

    無限のスケーラビリティを備えた比類なき機能を体験してください。クレジットカード不要、契約不要です。