Help us understand the problem. What is going on with this article?

JMeterを使用して負荷テストを効率よく行う

More than 1 year has passed since last update.

はじめに

システムの負荷テストを行う際、要件として使用人数を想定し、
『○○○人が使用すること想定した負荷をかける』というシチュエーションは、割とあるかと思います。

そんな時、すぐ何百人も用意できるかというと、ほとんどの場合ムリですよね。
そこで役に立つのが、”JMeter”です。

今回は、初歩的な設定から、実際に躓いたポイント(ググッてもすぐには分からなかった点)を
未来の自分の為に残しておきたいと思います。(忘れっぽいので。。。)

環境

以下の環境・バージョンを使用しています。
・ Apache Jmeter 5.0 r1840935
・ Windows7(32bit)
・ Java8

準備

1. Apache JMeterをダウンロードする

https://jmeter.apache.org/download_jmeter.cgi

今回は、zipファイルをダウンロードしました。
その後、任意のフォルダに解凍します。

2. GUI画面を立ち上げる

解凍したフォルダの中にbinフォルダがありますので、
その中にある jmeter.bat をダブルクリックして起動します。
image.png

起動する際、コマンドプロンプトが最初に立ち上がり、その後GUI画面が起動します。
(GUI画面起動までは数秒かかることがありますので、気長に待ちましょう)

3. 日本語表記にする

画面が起動した後、英語表記になっていますので、日本語表記にしましょう。
※画面の[Option]→[Language]→[Japanese]を選択して日本語表記にすることも可能ですが、
 閉じると英語に戻ってしまいますので、別の方法にしています。

参考:https://qiita.com/segur/items/66257aad638806b2f27a

① binフォルダ内に、新たにjmeter_ja.batを作成します。
② その中に、以下のように記述し、保存します。

REM 言語・国を設定する
SET JVM_ARGS="-Duser.language=ja"

REM JMeterを起動する
jmeter.bat

③ 保存したjmeter_ja.batをダブルクリックして実行し、画面が日本語になっていることを確認します。

以上で、JMeterを使用できる準備が整いました。
次からは、負荷をかける為のシナリオ設定作業に入ります。

設定作業(基本)

基本的な設定作業としては、以下の3STEPです。

 1.スレッドグループの作成
 2.パラメータの設定
 3.リスナーの作成

順番に見ていきたいと思います。

1.スレッドグループの作成

まず、スレッドグループを作成します。
[テスト計画]を右クリックし、[追加]→[Threads(Users)]→[スレッドグループ]をクリックします。
image.png

2.パラメータの設定

追加したスレッドグループの『スレッドプロパティ』に、どのようにテストを行うのかを記載します。
こちらの設定で負荷が変わってきますので、重要な設定です。
image.png

  • スレッド数
      どれくらいのセッションを起動するかを指定します。
      (人のイメージです)

  • Ramp-Up期間(秒)
      こちらで指定した期間に、スレッドを”スレッド数”で設定した数の分だけ生成します。
      (Ramp-Up期間 ÷ スレッド数 で、何秒毎に起動するかが分かります。)
       ※生成なので、Ramp-Up期間で設定した秒数内で処理の全てが完了するわけではありません。

  • ループ回数
      処理を繰り返します。

例として・・・
 スレッド数:10
 Ramp-Up期間(秒):60
 ループ回数:2
とした場合。
60秒間に、10人がログインする処理を、計2回行うイメージになります。

具体的なイメージは以下の通りです。
60÷10=6秒毎に、スレッドが起動します。
 ①---6秒待機-->②---6秒待機-->③---6秒待機-->・・・・⑥

ループ回数=2なので、再度実行します。
 ①'---6秒待機-->②'---6秒待機-->③'---6秒待機-->・・・・⑥'

※JMeterのバージョンによって、ループ回数の動作に違いがあるようです。
 私が実際に検証したバージョンでは、上記のような動作をしていました。

3.リスナーの作成

最後に、リスナーを作成します。
リスナーとは、負荷をかけた結果をまとめて表示してくれる機能です。
ここでは、『統計レポート』を例にしています。
[スレッドグループ]を右クリックし、[追加]→[リスナー]→[統計レポート]をクリックします。
image.png

負荷をかけた後の統計レポートは、こんな感じです。
image.png
※上記の例では、Error % が 100% になっていますが、要は失敗しているということです。
 0%であれば、成功しているということになります。

設定作業(実践)

単純に、「とあるシステムにログインのみ延々としたい」だけであれば、
HTTPリクエストを追加すればよいのですが、通常はもっと複雑な負荷をかけるものだと思います。

例えば、以下のような処理を想定した場合・・・

 ログイン→会員登録→受注登録→受注検索→ログアウト

JMeterの画面から、ひとつひとつHTTPリクエストを登録していくのは現実的ではありません。
そんな時は、処理をレコーディングさせてJMeterに登録しましょう。

プロキシサーバをJMeterに設定し、Google Chromeからプロキシサーバ経由でシステムにアクセスし、
記録を取っていくイメージです。

1.記録コントローラを追加

[スレッドグループ]を右クリックし、[追加]→[ロジックコントローラ]→[記録コントローラ]を追加します。
image.png

2.HTTPプロキシサーバを追加

一番上の[テスト計画]を右クリックし、[追加]→[Non-Testエレメント]→[HTTPプロキシサーバ]を追加します。
image.png

追加したHTTPプロキシサーバ画面にて、ポートを設定します。今回は、”8888”にしてみました。
image.png

3.Google Chromeの設定(※以下、ChromeとはGoogle Chrome)

Chromeの設定画面を開き、一番下の[詳細設定]をクリックします。
image.png

下の方にある、[プロキシ設定を開く]をクリックします。
image.png

[LANの設定]をクリックします。
image.png

プロキシサーバの設定をします。
チェックボックスにチェックを入れ、アドレスは127.0.0.1を設定します。
ここで重要なのは、ポートに
「JMeterのHTTPプロキシサーバ画面で設定したポート番号と同じものを設定する」
というところです。
image.png
設定したら、OKボタンで閉じましょう。

4.HTTPプロキシサーバ画面より、記録を開始

JMeterのHTTPプロキシサーバ画面に戻り、[開始]ボタンをクリックします。
image.png

メッセージが出ますが、OKボタンを押しておきます。
image.png

以下のような画面が表示されたら、記録が開始されていますので、
Chrome画面より、対象システムにアクセスして、記録させたい処理を手動で実行します。
image.png

完了したら、[停止]ボタンを押し記録を停止するのと、プロキシ設定を元に戻します。
記録に成功すると、JMeterの記録コントローラに処理が記録されています。
image.png

その他のポイント

詳細な設定はここでは説明しませんが、以下も追加しました。
・CSV Data Set Config の追加
  → ログインID・パスワード等、ログインする度に情報を変更したい場合、
   CSVを用意して順次読みこませることができます。

・HTTPクッキーマネージャ の追加
  → 超重要。基本はcompatibilityを選択します。
   これを作っておかないと、各画面に情報を持って遷移しません。

それぞれの登録位置も重要です。
以下のような配置で登録しました。
image.png

いざ、実行

記録した後、そちらで動作できるかのテストをしてみましょう。
そもそも動くかどうかの動作テストの時は、GUIモードで実行して構いません。
※実行する前には、必ず箒2つのボタンimage.pngを押して、今までの実行結果をクリアしておきます。
 (そうしないと、ログが合算されてしまいます)
以下のボタンをポチッと押して、記録した処理を動かしてみます。

image.png

動作テストがうまくいったのであれば、いよいよ本番として負荷をガンガンにかけてみましょう。
その時は、CUIモードで実行することが推奨されています。
コマンドプロンプトを開き、以下のコマンドを実行してください。

(jmeterのモジュールがあるディレクトリまで遷移してから・・・)
 jmeter -n -t [jmxファイル] -l [結果ファイル] -e -o [Webレポートフォルダのパス]

【実行例】
 jmeter -n -t D:\apache-jmeter-5.0\bin\負荷テスト.jmx -l D:\apache-jmeter-5.0\log\report_test.jtl -e -o D:\apache-jmeter-5.0\log\web_report

image.png
※あれ?Err率高い・・・そこは無視してください。

やっぱり、やめたい。

意気揚々と負荷をかけ始めたのはいいものの、サーバやアプリのチューニングができていなくて、
サーバが落ちてしまった・応答がなくなってしまった・・・
そんな時は、CUIモードでの実行を一旦キャンセルしたいですよね。

しかし・・・
コマンドプロンプトからCtrl+Cを実行しても、JMeterは止められません。

正しい手順が別にあります。
binフォルダにある、"shutdown.cmd"をダブルクリックすることで停止できます。
image.png
途中でやめても、jtlファイルは出力されますので、統計レポート画面でjtlファイルを呼びだすことで
結果を確認することができます。

まとめ

いかがでしたか?
今回は代表的な機能をまとめましたが、他にもたくさんの機能があります。
興味のある方は、色々と試してみるといいかもしれません。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした