JMeterの導入方法

![eyecatch-jmeter-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/b0ecb58d-89e1-0593-fea6-e68af837af0b.png)

# JMeterとは
・Apache が提供するオープンソースの負荷試験ツールで、javaで書かれています
・HTTPリクエストを⾃動で⼤量に発⽣させることが可能です
・JMeter Proxy を使うと、ブラウザでの操作を記録することが可能です
・JMeterスクリプトを作成し、シナリオ(ユーザ操作の仮説)に基づいた負荷試験を⾏うことができます
・プラグインをインストールすることで、機能拡張が可能です
・結果分析をするためのツール( 統計情報の分析、各種グラフ描画 )が充実しています


# 今回の項目
1. 事前準備
1. JMeterのインストール
1. JMeterの開き方
1. JMeterの設定
1. JMeter Proxyの設定とブラウザ操作の記録
1. JMeterスクリプトの作成
1. 結果分析とグラフ描画


# 事前準備
JMeterを動かすにはJAVA SE(JDK)が必要です
インストールしていない場合は[公式サイト](https://www.oracle.com/java/technologies/downloads/)から自分の環境にあったファイルをダウンロードしてインスト―ルを行ってください
![JAVASEインストール画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/41224936-6d54-2d53-5667-1f583a8f16a3.png)


# JMeterのインストール
**・Apache JMeterのダウンロード**
　　Apache JMeterの[公式サイト](https://jmeter.apache.org/download_jmeter.cgi)から最新版のzipファイルをダウンロードします
![JMeterインストール画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/929fd150-5e77-6491-0666-f3ab4c55a47d.png)
ダウンロード後、zipファイルを解凍し、解凍したフォルダを自分が分かる適当なフォルダに置いてください

**例)**```Windows で、c:\apache-jmeter-5.3\```　　など

<br><br>

**・JMeterプラグインのインストール**
　・[JMeter-Plugins.org](https://jmeter-plugins.org/wiki/PluginsManager/)から、jarファイルをダウンロードして下さい
![JMeterプラグインインストール画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/80871447-200d-f3ea-5c53-4953bb93580b.png)

プラグインダウンロード後、先ほどダウンロードしたJMeterフォルダの　```\lib\ext\```　以下に保存してください

**例)** ```c:\apache-jmeter-5.3\lib\ext\jmeter-plugins-manager-*.jar```

<br>

# JMeterの開き方

JMeterを使用するにはbatファイルを選択することでJMeterを開くことができます
フォルダの拡張子の表示がされていない場合は
　**エクスプローラー → 表示 → ファイル名拡張子**　にチェックを入れ、拡張子が表示されるようにしましょう

JMeterのbatファイルは以下に格納されています
　```apache-jmeter-5.3\bin\jmeter.bat```

![Jmeterbat場所.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/83435e16-c1ba-8ac7-257a-7ad134388d79.png)

<br>

# JMeterの設定

**・日本語設定**
　JMeterを開いて　オプション ＞ 言語の選択　で言語の変更が可能だが、<font color="Red">JMeterを閉じるとデフォルトに戻されてしまうので、</font>
　batファイルを編集して常に日本語設定になるように変更する。

**jmeter.batを右クリックして編集を選択**

<br>

以下の個所を探す(LANGUAGEなどで検索をかけると分かりやすい)

```if not defined JMETER_LANGUAGE (
    rem Set language
    rem Default to en_EN
   　　  set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"
        )
```
上記を以下のように編集する

```if not defined JMETER_LANGUAGE (
    rem Set language
    rem Default to en_EN
    rem set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"
        set JMETER_LANGUAGE=-Duser.language="ja" -Duser.region="JP"
)
```
完了したら保存をして、JMeterを起動させて確認を行う

![JMeter日本語起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/40151404-a9b9-2b27-2977-66d4e4c62b7c.png)

言語の選択項目は英語が選択されているが、日本語で起動するようになる

<br>

# JMeterProxyの設定とブラウザの操作

今回は紹介しませんが、JMeter Proxyを使わないでBlazeMeterのChrome拡張で操作を記録する方法もあります。

### JMeterProxyの設定

・テスト計画を右クリック＞追加 ＞ Non-testエレメント ＞ 「HTTPプロキシサーバ」を追加する
・テスト計画を右クリック＞追加 ＞ Threads(User) ＞ 「スレッドグループ」を追加する
・「HTTPプロキシサーバ」を選択し、以下を設定する

<font color="Red">**ポート番号：　デフォルトでは8888
対象となるコントローラー：　(上記工程で追加したスレッドグループを選択)**</font>

<br>
・[開始]を押下してすぐに[停止]を押す(JMeterのSSL証明書が生成される)

```c:\apache-jmeter-5.3\bin\ApacheJMeterTemporaryRootCA.crt```

![開始ボタン押下.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/12b16116-628c-d3c9-badd-51563cc7b730.png)


### プロキシ設定(Windows上のChromeの場合)
・Windowsの「インターネットオプション」または
**Chromeの「設定」で(”プロキシ”で検索をかけて) ＞ 「プロキシ設定を開く」**
・プロキシサーバの設定を有効にして、"localhost"、"8888"(上記で設定したポート番号)を入力する

![localhost設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/d43f6fb7-57cb-b830-e514-bf1fba115dad.png)

<font color="Red">**注) JMeterProxyを停止した後では、忘れずにプロキシサーバ設定を元に戻しておくこと**</font>

<br>

### SSL証明書の設定


・JMeterが生成した証明書をインストールして、SSL通信の中身を見ることができるようにする

**(Chromeの場合)
・設定 ＞ セキュリティ ＞ 「証明書の管理」を起動
・[信頼されたルート証明機関]タブで[インポート]を押下して、JMeterのSSL証明書をインポートする
　インポート先は下記を設定する**
```c:\apache-jmeter-5.3\bin\ApacheJMeterTemporaryRootCA.crt```

**・同様に[中間証明機関]タブでも同じSSL証明書をインポートしておく**

<br>

### JMeterProxyによるキャプチャ 

・JMeterの「HTTP プロキシサーバ」で、[開始]を押下する。
・ブラウザ操作したときに、JMeterのスレッドグループ以下にHTTPサンプラーが追加されたらOKです

<br>

# JMeterスクリプトの作成

JMeterProxyの設定とブラウザの操作でProxyにより生成したHTTPサンプラーを使うと簡単です
サンプラー追加後に必要なツールをスレッドグループに配置し、
スレッドグループを実行することで統計を取得することが出来ます
![JMeterスクリプトの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/0f826aa2-de78-6405-ea99-f2b2e0d09e8b.png)

### よく使うツール類

**・「結果をツリーで表⽰」**
　　・個々のHTTPリクエストについて、リクエスト と 応答データを確認できる
　　　ただし、JMeter側の負荷が⼤きくなるので、本番の負荷試験では使わないことが多い
**・「統計レポート」**(実⾏結果の統計情報を表⽰する)
**・「シンプルデータライタ」**(JMeter実⾏結果のログをファイルに保存する)

### ※「スレッド数」「Rump-Up 期間」「ループ回数」に関する説明︓
**・[スレッド数]**・・・一回のテストケース実行で生成されるスレッド数の設定、
　　　　　　　　　　スレッド数＝ユーザ数と考えればOK

**・「Ramp-Up期間」**・・・設定したスレッド数を何秒間で生成するかを設定する
　　　　　　　　　　　　 Rump-Up 期間(秒)を設定すると、1秒あたり <スレッド数÷Rump-Up期間> の
　　　　　　　　　　　　 スレッドが増加していくことになる

**・[ループ回数]**・・・上記テストケースを何回繰り返し行うかを設定します
　　　　　　　　　　「無限ループ」にチェックすると、実施中にスレッドが終了することがなくなる。　

<br>

# 結果分析とグラフ描画

**・統計レポート**
![統計レポート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/85f4f484-bdb4-4712-27aa-62a47e2244da.png)

**・jp@gc プラグインの機能を使うと便利です**

・jp@gc - [Active Threads Over Time](https://jmeter-plugins.org/wiki/ActiveThreadsOverTime/) (アクティブスレッド数の時系列変化)
![Active Threads Over Time.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/e8a6f3eb-8c5d-f71c-6351-176ae1d1dfcd.png)

・jp@gc - [Response Times Over Time](https://jmeter-plugins.org/wiki/ResponseTimesOverTime/) (応答時間の時系列変化)
![Response Times Over Time.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/7c281539-0805-8479-440d-f77e2ad15927.png)


・jp@gc - [Transactions per Second](https://jmeter-plugins.org/wiki/TransactionsPerSecond/) (トランザクション数(スループット)の時系列変化)
![Transactions per Second.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/710015/5743e128-3210-6358-d150-44f41aab806b.png)

<br>

[参考](http://tech-blog.rakus.co.jp/entry/2017/08/24/111332)
・timeStamp : リクエストの送信を始めた時間(ms)
　　　　　　　　並び順は、終了時間の昇順になる(timeStampは時間順には並んでいない)

・Latency : リクエストを送ってからレスポンスが届いた時間

・Elapsed : リクエストを送信し始める直前から、すべてのレスポンスを受信した直後までの時間

・Connect Time(ms) : JMeterがサーバとの接続確⽴にかかった時間

<br>

# まとめ
今回はJMeterの導入部分の解説をメインにこの記事を作成致しました
実際の実行部分はあくまで一例ですので、色々試してみたい方は
是非参考URLなどから確認してみて下さい

最後まで閲覧頂き有難う御座いました

# 参考
・JMeter[過去バージョン](https://archive.apache.org/dist/jmeter/binaries/)のダウンロード
・[負荷テスト・パフォーマンス測定ツールのJMeterのインストールと簡単な使い方](https://qiita.com/PlanetMeron/items/a604645d6f89b6ce3a14)・・・分かりやすい解説
・[JMeter | TECHSCORE(テックスコア)](https://www.techscore.com/tech/Java/ApacheJakarta/JMeter/index/) ・・・ やや情報が古いが充実している