JMeter負荷テストチュートリアル
JMeterロードテスト概要
すべてのウェブアプリケーションには最大負荷容量があり、それを超えると遅延、エラー、または全体的な効果低下を引き起こす可能性があります。負荷テストはウェブアプリケーションのパフォーマンス評価において重要です。この種のテストは、特に大量のユーザートラフィックを処理することが期待されるウェブアプリケーション、サイト、またはAPIのソフトウェアおよびアプリケーション開発ライフサイクルの重要な要素です。ピーク時または持続的に高いトラフィック条件下でアプリケーションが適切に動作できるように、パフォーマンステストツールを使用することが不可欠です。Apache JMeterはこの目的に人気のある選択肢であり、パフォーマンステストに不慣れな場合は、JMeterとは何か?そしてJMeterはどのように動作するのか?という疑問を持つかもしれません。ここではJMeterについて、そしてパフォーマンステストにJMeterを使用する方法を見ていきます。
負荷テストとは何か?
負荷テストとは、ウェブアプリケーションが通常およびピーク時負荷条件下で、または限界点を見つけるためにどのように動作するかを判断するパフォーマンステストの一種です。これはソフトウェア、ウェブサイト、ウェブアプリケーション、API、システムにおける実際の使用(負荷)をシミュレートし、応答性、劣化、スケーラビリティなどの要因を分析・特定する手法です。
負荷テストツール
負荷テストツールは、負荷テストの効率化とデジタルパフォーマンスの向上に非常に重要です。今日市場には多数のツールやプラットフォームが様々な機能を備えて存在しています。代表的な負荷テストツールには以下のものがあります:
-
- LoadView
- Apache JMeter
- WebLOAD
- LoadRunner
- Tricentis NeoLoad
- LoadNinja
このガイドではJMeterによる負荷テストに焦点を当てます。JMeterとは何か、JMeter負荷テストの方法、APIパフォーマンステストにJMeterを使用する方法などの質問に答えていきます。
JMeter負荷テストとは何か?
Apache JMeter、通称JMeterは、機能動作の負荷テストとパフォーマンス評価のために設計された100%純粋なJavaアプリケーションのオープンソースソフトウェアです。豊富なドキュメント、強力なコミュニティサポート、確立されたベストプラクティスにより、多くの開発者やソフトウェア開発チームにとって性能テストの好ましいツールです。さらに、無料でオープンソースであるためコスト効果も高いですが、100%Java製のため、テストプロセスの開始に追加の時間やリソースが必要となる場合があります。
JMeterはHTTP、HTTPS、FTPなど多様なプロトコルをサポートしており、異なるタイプのアプリケーションテストに柔軟に対応可能です。ユーザーは様々なシナリオ、例えばユーザー操作のシミュレーション、サーバーパフォーマンスの監視、応答時間の分析などを定義するテストプランを作成し、実行できます。
JMeter負荷テストは機能動作への負荷テストを実施し、そのパフォーマンスを測定するために設計されています。多くのチームはJMeterテストをCI/CDパイプラインに統合し、ビルドやデプロイの際にパフォーマンスチェックを行っています。JMeterを使ってウェブアプリケーションやサービスのパフォーマンスを分析・測定し、収集したデータの解析やレポート作成により動作を観察し、パフォーマンスのボトルネックを特定することでアプリケーション改善の指針を得ることができます。
なぜJMeterを使うのか?
- オープンソース:JMeterは完全に無料で、開発者はソースコードを利用可能です。
- プラットフォーム非依存:JMeterはプラットフォームに依存せず、複数の環境で動作します。
- マルチプロトコル対応: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テストプラン、基本および高度なWebテストプラン、FTPテストプラン、機能テストプランなどがあります。これらのテンプレートには負荷テストプラン作成に必要な特定の要素やセクション、フィールドが含まれています。
テストプラン作成は、ファイルメニューの新規作成か、ツールバーの新規ボタンから行います。テストプラン作成はGUIモードで行う必要があり、CLI(コマンドラインインターフェース)は負荷テストの実行に用います。続いて負荷テストのユーザー数(スレッドグループ)について説明します。
ステップ4:JMeterでのスレッドグループの追加と設定
スレッドグループを追加するには、「テストプラン」を右クリックし、「スレッド(ユーザー)」にカーソルを置き、「スレッドグループ」をクリックします。
表示されるスレッドグループダイアログでは、スレッド数(ユーザー数)、ランプアップ期間(秒)、ループ回数(テスト繰り返し回数)など各種スレッドプロパティを編集できます。遅延設定、テスト開始・終了時間の指定、サンプラーエラー時の動作なども可能です。各プロパティは以下の通りです:
-
- スレッド数:サーバーに接続する仮想ユーザー数を表します。
- ランプアップ期間:指定されたスレッド数を稼働状態にするまでの時間(秒)です。
- ループ回数:各スレッドが実行するタスクの繰り返し回数です。
- 無限ループ:有効にするとループ回数を無視し、手動停止まで無限ループとなります。
- 必要時までスレッド作成を遅延:指定された秒数までスレッド作成を遅らせます。
- スケジューラ:有効にすると特定時間にテストをスケジュール可能にします。
このステップで負荷テストの並行ユーザー数、所要時間、条件を細かく設定できます。
ステップ5:JMeterでのサンプル設定
JMeterのサンプラーは異なるタイプのリクエスト送信を可能にします。例えばHTTPリクエスト(ウェブサイトやアプリ、API向け)、FTPリクエスト、SMTPリクエスト、TCPリクエストなどがあります。ここでプロトコル(HTTP/S)、サーバー名またはIP、パス(特定のウェブページ)、GET、POST、HEAD、PUTなどのリクエストタイプを入力し、API負荷テストに使用します。
ステップ6:リスナーの設定
サンプラー結果を分析するために「リスナー」を設定します。JMeterテストプランウィンドウではサマリーレポート、集計グラフ、結果ツリー、テーブル表示など多数のリスナーを選択可能です。複数設定も可能で、設定後はテストプランが完成しテスト実行に進みます。
ステップ7:負荷テストスクリプトの記録
基本的なHTTPやプロトコルレベルの負荷テストを行う場合は追加設定不要ですが、ユーザーの動作に近いテストをしたい場合はJMeterのHTTP(S)テストスクリプトレコーダーを利用します。
スレッドグループに記録コントローラを追加し、サイトやアプリの操作を記録します。ページごとに複数の記録コントローラも可能で、手動でリクエストを追加する手間を省けます。
ただし、記録はHTTP/Sリクエスト単位でブラウザのユーザー視点での録画ではありません。ブラウザ録画もJMeter Proxy Serverで可能ですが難易度が高いです。より簡単な方法としてLoadViewのEveryStep Web Recorderがあります。LoadViewのレコーダーは実際のブラウザ利用によるクリック操作でスクリプトが作成でき、JMeterの複雑な設定なしで使えます。
ステップ8:負荷テストの実行
すべての負荷テスト設定を保存後、ツールバーの実行ボタンを押しテストを開始します。CLIモードで実行するとより良い結果が得られます。
ステップ9:負荷テスト結果の確認
リスナーによりますが、テーブル形式で結果が表示されます。時間(ミリ秒)、ステータス(有効レスポンス・エラー)、送受信バイト数、遅延、接続時間などのメトリクスが含まれます。これらを解析することでエラー箇所や遅延発生部分を特定できます。
JMeterによるAPI負荷テストの実施方法
これまでJMeterでのウェブサイトやアプリのプロトコルベース負荷テストの手順を解説しました。ここからはSOAPやREST APIなど異なるAPIテストをJMeterで行う方法を紹介します。インストールと設定手順は先述の内容と同様です。APIテストの基本的なポイントに注目し、JMeterでAPIテストを行う際の注意点を説明します。
JMeterによるREST APIテスト
RESTful API(リプレゼンテーショナルステートトランスファーAPI)は多様なウェブサービスの開発に欠かせません。SOAP APIとは異なり、RESTはプロトコルではなくURI(統一資源識別子)とHTTPプロトコルを基盤としたアーキテクチャ様式です。
ステップ1:負荷テストプランの作成
JMeterを開くと新規のテストプランウィンドウが表示されます。すでに開いている場合はツールバーの「新規」ボタンから新しいテストプランも作成可能です。
ステップ2:JMeterでのスレッドグループ追加と設定
前述と同様にスレッドグループ画面ではユーザー数(スレッド)、ランプアップ時間、ループ回数などを設定し、その他のプロパティも編集できます。
ステップ3:サンプラーの設定
次にサンプラーを追加します。JMeterの事前設定サンプラーや独自のものから選べます。ここでは事前設定のHTTPリクエストを使用します。
スレッドグループを右クリックし「追加」>「サンプラー」と選択するとサンプラー一覧が現れます。APIテストにはHTTPリクエストを選択し、テスト名やREST APIテストのパラメータをセットアップします。HTTPリクエスト画面は基本(Basic)と詳細(Advanced)セクションに分かれていますが、今回は基本設定に注目します。プロトコル、サーバー名またはIP、ポート番号、HTTPリクエスト(GET/POST/HEAD/PUT/DELETEなど)、パラメータなどを設定できます。
まず「サーバー名またはIP」欄にAPIのURL(ドメイン名のみ)と適切なプロトコルを入力し、「パス」欄にAPIのパスを追加します。
GETリクエストの場合はHTTPリクエストのリストからGETを選択します。
特定のページなどのパラメータがあれば、「パラメータ」欄に追加可能です。
パス欄にも追加可能ですが、パラメータ欄へ入れることで「URLエンコード?」や「Content-Type」、「Include Equals?」などの追加設定が利用できます。
一部のリクエストではリクエストヘッダーの追加が必要です。これを行うにはテストプラン内のHTTPリクエストを右クリックし「追加」>「コンフィグエレメント」と進みます。そこで「HTTPヘッダーマネージャ」を選択できます。表示されるウィンドウでAPIのヘッダー情報を入力します。設定完了後、次のステップに進みます。
ステップ4:リスナーの追加
リスナーを追加するには、スレッドグループを右クリックし「追加」>「リスナー」と選択します。15以上のオプションが表示され、一般的には「結果ツリー表示」や「テーブルで結果を見る」が人気です。グラフィカル表示を行うリスナーはメモリとCPUを多く消費することに注意してください。リスナーを追加後、テストプランを保存します。
ステップ5:テストの実行と結果の確認
負荷テスト設定を保存後、ツールバーの実行ボタンでテストを開始します。ウィンドウにサンプラーの結果が表示され、レイテンシー、応答コード、接続時間などREST APIテストに関連した詳細情報やデータ、指標が確認できます。
JMeterによるSOAP APIテスト
SOAP(Simple Object Access Protocol)はREST APIとは異なり独自のプロトコルで動作します。SOAP APIの負荷テストにはセキュリティやコンプライアンス、帯域要求(SOAP APIは一般的にリソース要求が多い)、リトライロジック(RESTにはない機能)など特有の考慮点があります。
ステップ1:負荷テストプランの作成
JMeterはメニューやツールバーのテンプレートアイコンから「SOAP WebService テストプラン作成」のテンプレートを選択可能です。これを選ぶと該当テストプランが生成され開きます。テンプレートにはプレースホルダー値があり、適切なデータと情報を入力してください。
ステップ2:データの入力
REST APIと同様にユーザースレッド数、ランプアップ期間、ループ回数(テスト繰り返し)を入力します。
メインスレッドグループのサブグループにはHTTPリクエスト設定があり、REST API設定と似ています。ただしSOAP APIリクエストボディがデフォルトで表示されます。HTTPヘッダーマネージャやレスポンスアサーションのサブセクションも含まれています。認証情報が必要な場合はHTTP認証マネージャなどの追加コンフィグエレメントを組み込めます。
ステップ3:HTTPリクエストサンプラーの追加
SOAP API負荷テストにはHTTPリクエストサンプラーを追加し、サーバー名またはIP、パス、HTTPリクエストの種類、ポート番号、SOAPリクエストのボディデータを入力します。
ステップ4:リスナーの追加
テストプラン設定後、必要な数だけリスナーを追加しテスト結果を表示します。SOAP API負荷テストに適したリスナーを選択してください。
ステップ5:テストの実行
テストプランの設定を完了し保存後、SOAP API負荷テストを実行し完了後に結果を確認します。
まとめ
これまでにJMeterとは何か、JMeter負荷テストのやり方、JMeterでAPI負荷テストを行う方法を学びました。JMeterで負荷テストをセットアップするには多くのステップや設定項目があり、その分テスト実施に費やす時間より準備に時間を取られることがわかります。JMeterは無料かつオープンソースであるものの、より良い機能を持ちビジネスニーズに合った他の負荷テストツールも検討すべき場合があります。
LoadView:最高のJMeter代替ツール
LoadViewは今日利用可能な優れた有料パフォーマンステストソリューションの一つで、様々な機能を備えています。これにはポイント&クリックのスクリプトレコーダー、グローバルなロードインジェクタサーバーネットワークへのアクセス、および多彩な負荷カーブシナリオの設定の柔軟性があります。JMeterとは異なり、LoadViewは追加インフラ無しで管理され、プロトコルレベルの負荷テストに限定されないリアルブラウザを利用し、重要なサイト、アプリケーション、APIの実際のパフォーマンスを評価可能です。さらにLoadViewは、静的プロキシIPのホワイトリスト登録やオンサイトエージェント利用など複数のオプションを持ち、ファイアウォール内部のアプリケーションでのテストも可能にして、パフォーマンステストにより高い柔軟性を提供します。
LoadViewは使いやすいパフォーマンスレポートやダッシュボードを提供し、パフォーマンス低下の要因を明確に把握できます。また、ウェブページやウェブアプリテストの参照動画を含み、レポートと比較してユーザー視点を可視化します。LoadViewは月単位・年単位の柔軟なプランを備え、24時間365日体制のサポートを全利用者に提供し、他のツールとの差別化を図っています。
あなたの負荷テストを次のレベルへ
次のレベルへ引き上げましょう
無限のスケーラビリティで比類なき機能を体験してください。クレジットカードも契約も不要です。