JMeter入門
JMeterはオープンソースのJavaツールで、高負荷状態におけるシステムの振る舞いを測定するためのパフォーマンステストによく使われます。これがJMeterの主な目的ではありますが、実際には以下のような、ほとんどのシステムテストに活用できます。
- 機能テスト
- パフォーマンステスト
- 負荷・安定性テスト
- スケーラビリティテスト
- リグレッションテスト
システムテストは、単体テストと結合テストの後、受け入れテストの前に行われます。通常、開発・テストチームが実施する最終ステップです。「システムテストにわざわざ別のツールは必要ない」と主張する方もいるかもしれませんし、実際、あなたのケースではそれが正しいかもしれません。開発中に、完全に統合されたモジュールを使って結合レベルでテストをいくつか書くだけでも、うまくいくこともあります。しかし、何の工夫もなしにすべての要件をチェックするのが難しいケースもたくさんあります。
ここでJMeterが真価を発揮します。JMeterは、まさにそうしたテストのために特別に用意されたツールなのです。まず、テストに使うユーザー(スレッド)数を簡単に設定できます。これを行うには、Test Planを右クリックし、Addリストからオプションを選択します。さらに多くの設定が必要な場合は、起動遅延やランプアップ期間を定義したり、サンプラー(個々のテストのようなもの)が失敗した場合の動作を選択したりすることもできます。各スレッドに対して、いくつかのサンプラーを選択できます。
- HTTP Sampler — ユーザーのサイト訪問を模倣し、RESTやSOAPのWebサービスをテストします。
- JDBC Sampler — データベースに接続してデータを確認したり、DMLクエリを実行したりします(JDBC Connection Configuration要素が必要です)。
- JSR223 Sampler — Javaプラットフォーム向けのスクリプト(Groovy/BeanShell/JavaScriptなど)を使用します。
- SMTP and Mail Reader Samplers — SMTPサーバーをテストしたり、メールが配信されたかを確認したりします。
- JMS Samplers
- TCP Sampler
- FTP Request
- JUnit Request
- …
各サンプラーには、データを検証するための様々な種類のアサーション(表明)を追加できます(右クリック->Add)。
- Response Assertion — 正規表現機能を使ってレスポンス(ヘッダー/ボディ/ステータス)を検証するデフォルトのアサーションです。
- JSON Assertion — JSON Pathとオプションの正規表現を使ってJSONレスポンスデータを検証します。
- JSR223 Assertion — 検証にスクリプト言語を使用します。
- XPath Assertion — JSON Pathと同様ですが、XML用です。
- …
小さなテストケースなら、GUIのアサーションで十分でしょう。より複雑な問題に直面した場合、もしあなたが開発者なら、JSR223 Assertionが最も効率的かもしれません(JMeterの扱いにくさやデバッグオプションの制限はさておき)。そうでなければ、Logic Controllers(if/while/for)やPost Processors(extractor)を使ってテストプランを再構築することをお勧めします。PreプロセッサとPostプロセッサは、選択したサンプラーの実行前後にロジックを実行するために使用できます。
その他、JMeterに標準で備わっているものとして、Timers、Config Elements、Listenerがあります。タイマーは、スレッドを停止させたり、グルーピングのために一時停止させたり、期待するスループットに達するために遅延させたりと、時間を簡単に管理する方法を提供します。設定エレメントは、パラメータ、カウンター、リクエストのデフォルト値、接続設定を定義するために使用できます。リスナーは、テスト結果を視覚化する方法を提供します。
最後に、テストを開発する際におそらく最もよく使うであろういくつかのものを紹介します。
- Debug SamplersとDebug Post Processors — サンプラーの入力と出力ログを、変数値とともに提供します。
- View Results Tree (Listener) — ログとともにテスト結果を確認できます。
- SummaryまたはAggregate Report (Listeners) — パフォーマンステストの統計情報を出力します。
- User Parameters (Pre Processor)またはUser Defined Variables (Config Element) — パラメータ(値を取得するには
${param_name}構文を使用)や変数を定義します。
さらに、もっと高度な機能が本当に必要な場合は、多数のカスタムプラグインをインストールしたり、独自のプラグインを作成したりできます。JMeterのテストは手動で実行することも、CI/自動化ツールで実行するように設定して複数の環境をターゲットにすることもできます。このアプローチは、異なるバージョンや設定下でのシステムの一貫性を検証するための、少し違った、そして時には非常に有用な方法を提供します。
