はじめに
筆者がこれまで見てきたWebシステムの中には、機能仕様を満たしているものの、パフォーマンスの点でユーザが大きな不満を抱えているケースが珍しくありませんでした。その理由として、負荷テスト(または、ストレステスト)がほとんど行われていない、または全く行われていないケースであることが多かったのです。不特定多数のユーザが利用するWebアプリケーションでは、どれほど便利な機能があったとしても、十分なパフォーマンスが出なければ、ユーザビリティを損なってしまいます。
そこで、本稿では負荷テストツールであるJMeterを使い、Webアプリケーションに対して負荷テストを行う方法を解説します。
対象読者
Webアプリケーションの開発を行っていて、JMeterを使った基本的な負荷テストの方法を学習したい方。開発言語は問いません。
環境
必須環境
本稿では、JMeterとテスト対象Webアプリケーションが正しく動作する環境が必要です。Webアプリケーションは、J2SE Development Kit 5.0 Update 6、Tomcat 5.5.12にて動作確認をしています。環境についての詳細や設定方法については、「サーバサイド技術の学び舎 - WINGS」にある「サーバサイド環境構築設定」を参照してください。JMeterはバージョン2.1.1で動作確認をしています。
推奨環境
正しい負荷テストを行うには、テスト内容に応じたネットワーク環境、端末が必要です。本稿では、読者がすぐに実践できるように端末一台でテストする場合について解説しています。しかし、正しくテスト結果を得るには、Webアプリケーションが動作する端末(サーバー)とJMeterを動作させる端末(クライアント)を分ける必要があります。また、クライアント端末の処理能力によって生成できる負荷にも限度があるため、与える負荷の大きさによっては複数台のクライアントが必要であることも覚えておいてください。
JMeter
JMeterは、Apache Jakarta Projectで開発が進められている負荷テストアプリケーションです。Webアプリケーション(HTTPベースのアプリケーション)に限らず、FTP、JDBC、LDAPなどのインタフェースをもったアプリケーションに対して負荷テストを行うことができます。また、負荷テストの機能以外にもアサーションなどの単純なテスト機能も備わっています。
Webアプリケーションの負荷テストが行えるツールとして、他にもOpenSTA、Mercury LoadRunnerなど優れたツールが存在しますが、以下のポイントからJMeterを取り上げます。
100% pure Javaである
Javaで記述されているためOS環境を問いません。UNIX環境からコマンドラインで操作することももちろん可能です。
オープンソースである
オープンソースであるため、導入コストが少なくてすみ、コミュニティも活発です。負荷テストツールの中には、Mercury LoadRunnerのように非常に高機能である反面、導入コストが高いものも多く存在しています。システムの規模によっては有力な選択肢になりますが、今回は導入のしやすさからJMeterを解説したいと思います。
操作が簡単である
操作がシンプルでCUIはもちろんGUIでもテストを行うことができます。
負荷テスト対象アプリケーションの概要
テスト対象のアプリケーションに、簡易的な一行メモ帳の機能を持つWebアプリケーションを使用します。機能と画面フローの図を解説します。
- 適当なユーザIDでログインができ、ログインするとユーザ専用のメモ帳保存フォルダが作成され、メモを入力できる画面に遷移する。
- メモの内容を入力して、[メモ追加]を押下することにより、メモの情報が一つの新しいファイルとして生成される(メモの数だけファイルが存在)。
- メモを入力する画面では、表示する度にファイルからユーザの全てのメモを読み込んで表示する。