SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JMeterでWebアプリケーションのパフォーマンス測定を行う

オープンソースの負荷テストツールJMeterの利用


テストシナリオの作成

 負荷テストを行う前には、テストシナリオを考える必要があります。例えば、「100人のユーザで1分間に1ユーザーが6回ずつリクエストを送信し、10分間負荷をかける。十分なレスポンスタイムが得られるかどうか?」といったものです。今回のテストシナリオを箇条書きで以下に並べます。

  • ユーザは10人で、36秒ごとに一人ずつログインしていく。
  • 各ユーザはログインしてから、2秒おきにメモを追加する処理を100回繰り返し終了する。
  • HTTPレスポンスのコードが正しいかだけでなく、内容も正しいか確認する。

JMeterでテストシナリオを設定(前半)

 それでは、作成したテストシナリオに合わせてJMeterを設定していきます。以下の手順に従って、設定した内容をJMeter特有のファイルに保存するまでをまず行います。

  1. JMeterの起動
  2. スレッドグループの作成
  3. サンプラーの作成
  4. ユーザーパラメータの作成
  5. コントローラーの作成
  6. HTTPクッキーマネージャの作成
  7. タイマの作成
  8. アサーションの作成
  9. リスナーの作成
  10. テスト計画の保存

1.JMeterの起動

 JMeterを起動するには、解凍したディレクトリの「bin」ディレクトリの中にある「ApacheJMeter.jar」を実行します。下のGUIの画面が表示されればOKです。

JMeter起動直後の画面
JMeter起動直後の画面

 起動すると、[テスト計画]と[ワークベンチ]が表示されます。

 実際にテストを行う時には、[テスト計画]の中に設定されているものが実行されます。[ワークベンチ]は、テストをする際に一時的に外しておきたいものなどをプールする場所として使われます。例えば、複数のリクエストを作成し、一時的に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リクエストの作成
ログイン処理の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の負荷測定
文字化けの注意
 JMeterでリクエストを送信する際に、パラメータの文字コードは全てUTF-8で送信されています。これはJMeterのJavaファイル自体に記述されているため、基本的に変えることはできません。対策方法として以下のような方法が上げられます。
  1. Webアプリケーションのリクエスト処理をUTF-8で処理するようにする
    これを行えばJMeterでは特に意識せずとも文字化けを防ぐことができます。ただ当たり前ですが、既に他の文字コードで実装しているアプリケーションに対して、このような修正処理を行うのはできるだけ避けたいところです。
  2. JMeterのソースを他の文字コードで処理するように修正する
    JMeterのソースをダウンロードしてきて文字コードの部分を修正し、Jarファイルを新たに生成する方法です。コアな部分を修正することになるので、多少リスクは伴いますが、既にアプリケーションを作り始めている場合にはこちらの方がいいでしょう。
    もしくは、負荷テストだからということで割り切り、本来日本語のフィールドに対しても英語で処理するというのも一つの手だと思います。

4.ユーザーパラメータの作成

 テスト対象のアプリケーションでは、ログインをして、ログインユーザーごとにメモ情報を管理しています。そのため、実行するスレッドはそれぞれ別のユーザーとしてログイン処理することが望ましいと言えます。別のユーザとしてログインするためには、サンプラーに対してスレッドごとに異なるパラメータ(ログインIDとパスワード)を渡す必要があります。

 こういった場合には、ユーザーパラメータを作成します。[スレッドグループ]を右クリックして[追加]→[前処理]→[ユーザパラメータ]を選択し、下のように設定してください。

ユーザーパラメータ
ユーザーパラメータ

 ここでは、useridpasswordという名前の変数を定義しています。そして10個のユーザがそれぞれ異なるuseridpasswordを持っているのが分かると思います。これにより、各スレッドがuser001~user010のユーザとしてログインすることができます。変数とユーザーを変更するには、下にあるボタンをクリックすることにより簡単に行えます。

 また、実際にこの変数を使うには、${定義された変数名}と記述すればいいだけです。例えばuseridであれば、${userid}と入力すれば各スレッドごとにuser001~user010の値に展開されます。

次のページ
JMeterでテストシナリオを設定(後半)

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 佐藤 真介(サトウ シンスケ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/336 2008/08/19 20:51

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー