テストシナリオの作成
負荷テストを行う前には、テストシナリオを考える必要があります。例えば、「100人のユーザで1分間に1ユーザーが6回ずつリクエストを送信し、10分間負荷をかける。十分なレスポンスタイムが得られるかどうか?」といったものです。今回のテストシナリオを箇条書きで以下に並べます。
- ユーザは10人で、36秒ごとに一人ずつログインしていく。
- 各ユーザはログインしてから、2秒おきにメモを追加する処理を100回繰り返し終了する。
- HTTPレスポンスのコードが正しいかだけでなく、内容も正しいか確認する。
JMeterでテストシナリオを設定(前半)
それでは、作成したテストシナリオに合わせてJMeterを設定していきます。以下の手順に従って、設定した内容をJMeter特有のファイルに保存するまでをまず行います。
- JMeterの起動
- スレッドグループの作成
- サンプラーの作成
- ユーザーパラメータの作成
- コントローラーの作成
- HTTPクッキーマネージャの作成
- タイマの作成
- アサーションの作成
- リスナーの作成
- テスト計画の保存
1.JMeterの起動
JMeterを起動するには、解凍したディレクトリの「bin」ディレクトリの中にある「ApacheJMeter.jar」を実行します。下のGUIの画面が表示されればOKです。
起動すると、[テスト計画]と[ワークベンチ]が表示されます。
実際にテストを行う時には、[テスト計画]の中に設定されているものが実行されます。[ワークベンチ]は、テストをする際に一時的に外しておきたいものなどをプールする場所として使われます。例えば、複数のリクエストを作成し、一時的に1つのリクエストだけを実行したくない場合に、[ワークベンチ]にいれておく、といった使い方ができます。
2.スレッドグループの作成
まずは、テスト計画の下に、スレッドグループを作成します。スレッドグループは、スレッド数、リクエストの頻度、などの基本的なスレッドの情報を設定するものです。
では、スレッドグループを作成して必要な値を設定していきます。[テスト計画]を右クリックして[追加]→[スレッドグループ]を選択すると、スレッドグループを作成することができます。表示された設定画面で以下のように設定してください。
主な設定項目の概要を表にまとめました。
| 項目名 | 概要 | 今回の設定値 |
| 名前 | スレッドの名前 | スレッドグループ |
| スレッド数 | スレッド数、またはクライアント数 | 10 |
| Ramp-Up期間(秒) | 指定されたスレッド数を何秒間で生成し終えるか | 360 |
| ループ回数 | 指定されたスレッド数+Ramp-Up期間によるテストを何度繰り返すか | 100 |
ここでは、36秒(360 / 10)ごとに1個のスレッド(ユーザー)を立ち上げて、最大10個のスレッドが立ち上がり、それを100回繰り返すように設定しています。合計で、1000(10*100)セットのリクエストが送信されます。
3.サンプラーの作成
サンプラーとは負荷テスト対象のサーバーへ送るリクエスト情報です。今回はWebアプリケーションに対してのリクエストを生成するので、HTTPリクエストのサンプラーを生成します。
では、サンプラーを作成して必要な値を設定していきます。スレッドグループ名を右クリックして[追加]→[サンプラー]→[HTTPリクエスト]を選択すると、HTTPリクエストのサンプラーを作成することができます。
ログイン処理のHTTPリクエストは次のように設定してください。
また、メモ追加処理のHTTPリクエストは次のように設定してください。
設定項目のうち特に分かりにくい項目の概要を表にまとめました。
| 項目名 | 概要 |
| Encode? | パラメータの値をURLエンコードするかどうか |
| 等号含む? | パラメータのkey=valueの=を入れるかどうか |
| リダイレクトに対応 | リダイレクト応答のレスポンスを無視するかどうか(チェックすると、リダイレクト応答のレスポンスを無視し、リダイレクト先のみの検証ができます) |
| KeepAliveを有効にする | HTTPの拡張版で接続をオープンしたまま通信を行うことができるKeepAliveプロトコルを使用するかどうか(KeepAliveを使用したアプリケーションならチェックします) |
JMeterでは基本的に画面の上から順にサンプラーを実行していきます。そのため、ここではログイン処理、メモ追加処理の順にサンプラーを作成してください。ただ、順番は途中で簡単に入れるかえることもできます。対象のサンプラーを移動させたいサンプラーの位置までドラッグ&ドロップすると、[前へ挿入]、[後へ挿入]と表示されるので、ここで挿入したい位置を選択すれば変更することが可能です。この位置変更はサンプラーに限らず他の要素でも行うことができます。
サンプラーには、今回のHTTPリクエスト以外にも以下のようなサンプラーがあります。これらを使用することにより、Webアプリケーション以外のさまざまなアプリケーションをテストすることができます。
| サンプラー名 | 概要 |
| FTP リクエスト | FTPサーバーの負荷測定 |
| JDBC リクエスト | DBサーバーの負荷測定 |
| Java object リクエスト | Javaクラスの負荷測定(JMeterのライブラリに含まれるJavaSamplerClientを実装すると、JMeterから直接リクエストを送り負荷測定ができます) |
| LDAP リクエスト | LDAPサーバーの負荷測定 |
| SOAP/XML-RPC リクエスト | SOAP/XML-RPCの負荷測定 |
| WebService (SOAP) リクエスト | WebServiceの負荷測定 |
- Webアプリケーションのリクエスト処理をUTF-8で処理するようにする
これを行えばJMeterでは特に意識せずとも文字化けを防ぐことができます。ただ当たり前ですが、既に他の文字コードで実装しているアプリケーションに対して、このような修正処理を行うのはできるだけ避けたいところです。
- JMeterのソースを他の文字コードで処理するように修正する
JMeterのソースをダウンロードしてきて文字コードの部分を修正し、Jarファイルを新たに生成する方法です。コアな部分を修正することになるので、多少リスクは伴いますが、既にアプリケーションを作り始めている場合にはこちらの方がいいでしょう。もしくは、負荷テストだからということで割り切り、本来日本語のフィールドに対しても英語で処理するというのも一つの手だと思います。
4.ユーザーパラメータの作成
テスト対象のアプリケーションでは、ログインをして、ログインユーザーごとにメモ情報を管理しています。そのため、実行するスレッドはそれぞれ別のユーザーとしてログイン処理することが望ましいと言えます。別のユーザとしてログインするためには、サンプラーに対してスレッドごとに異なるパラメータ(ログインIDとパスワード)を渡す必要があります。
こういった場合には、ユーザーパラメータを作成します。[スレッドグループ]を右クリックして[追加]→[前処理]→[ユーザパラメータ]を選択し、下のように設定してください。
ここでは、useridとpasswordという名前の変数を定義しています。そして10個のユーザがそれぞれ異なるuseridとpasswordを持っているのが分かると思います。これにより、各スレッドがuser001~user010のユーザとしてログインすることができます。変数とユーザーを変更するには、下にあるボタンをクリックすることにより簡単に行えます。
また、実際にこの変数を使うには、${定義された変数名}と記述すればいいだけです。例えばuseridであれば、${userid}と入力すれば各スレッドごとにuser001~user010の値に展開されます。





