JMeter 導入と使用方法

# ◆はじめに

負荷試験ツールにはいろいろなものがあるかと思いますが（といっても今回のJmeter以外使用したことがない。。。。）、
JMeterについて紹介したいと思います。

# ◆JMeterとは

- Apache が提供するオープンソースの負荷試験ツールで、javaで書かれています。
- HTTPリクエストを⾃動で⼤量に発⽣させることが可能です。
- JMeter Proxyを使用すると、ブラウザ操作を記録できます。
- 結果分析ツール(統計情報分析、各種グラフ描画)機能があります。

# ◆javaインストール

先に書きましたが、javaで書かれているのでjavaがインストールされていないと動作しません。
なのでjavaがインストールされていない場合はインストールしてください。
インストール方法については割愛しますが、[こういうところ](https://qiita.com/ko2a/items/69fa8a5366d7449500ca)などを参考にしてください。

# ◆JMeter導入方法

[公式サイト](https://jmeter.apache.org/download_jmeter.cgi)にアクセスしBinariesのところにあるzipファイルをダウンロードし任意の場所に解凍します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/020d1e95-3555-6e2f-dbf1-ce054ebcdbc8.png" width="70%">

<font color="red">binフォルダ内のjmeter.batをダブルクリックして起動します。</font>

日本語化は[こちらの日本語化](https://qiita.com/gtom7156/items/92aab9185c5b7d5feda9)のところを参考に設定してください。

# ◆シナリオ作成方法

「テスト計画」右クリックで「追加」 > 「Threads(Users)」 > 「スレッドグループ」を追加
「スレッドグループ」右クリックで「追加」 > 「ロジックコントローラ」 > 「記録コントローラ」を追加
「テスト計画」右クリックで「追加」 > 「Non-Testエレメント」 > 「HTTPプロキシサーバ」を追加
「HTTPプロキシサーバ」を選択し以下の設定を行う。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/52720b64-cc4b-e3a6-eee2-33e240fdeee6.png" width="70%">

次にブラウザのアクセスをJMeterのプロキシ経由に変更する。※以下はFirefoxの例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/5c228695-3fd7-de33-92e9-accf2a254466.png)
「設定」 > 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/d590dec0-fe9d-f7ef-26c4-4cf167f39fc4.png)

開始をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/017fb6c7-8a94-e518-7bc6-35fd26edb135.png)

認証設定を行います。
JMeterインストールディレクトリのbinフォルダ内に「HTTPプロキシサーバ」起動時に<font color="red">crtファイル</font>が自動生成されます。
そのcrtファイルをインポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/c3ff916d-ff81-45d2-41ca-07cd753637f3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/94414774-64cd-da8c-8160-45bd5e1d088f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/1c4df2c8-e7ec-6d2e-a9df-06a324c8aea9.png)

実際にブラウザで操作を行うと、自動的にリクエストなどが記録されていきます。
記録が完了したら、不要なリクエスト（css、javascriptのリクエストなど）は削除します。

結果をツリーで表示を追加し緑三角ボタンをクリックするとシナリオを実行することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/96a176c3-8d58-9eda-504f-149e26fdec1f.png)


# ◆JMeterの開発

#### 変数と連番使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/30c5842c-fc1b-f2e6-b088-923eff3fe76e.png)

#### 待機処理

定数タイマを使います。下記例だとREQ-A実行後、10秒待機しREQ-Bを実行します。
また10秒待機しREQ-Cを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/12660bcf-b9a7-b739-3325-4a3900b0940c.png)

#### CSVファイルの読み込み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/c9265ba8-8784-09d7-a067-694d0f14bfd6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/361b2d5c-cc78-2a24-b933-9b4608f773d8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/7a5648c1-08fd-31cf-e5aa-2a3cba159236.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/f5a9e7ca-41f7-5f80-9cba-0e6b78ca7f5c.png)


#### javascriptの使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/0f3cd0e8-502e-bf65-93fd-16004df4d1cd.png)

#### クッキーの持ち回り

クッキーを持ちまわる場合は、
「スレッドグループ」右クリック > 「追加」 > 「設定エレメント」 > 「HTTPクッキーマネージャ」
をスレッドグループ内の最上位箇所に追加します。

# ◆Jmeterスレッドの設定

#### スレッド数

|  プロパティ  |  内容  |
| ---- | ---- |
|  スレッド数  |  起動するスレッド数  |
|  Ramp-up期間（秒）  |  スレッド数を起動する期間  |
|  ループ回数  |  シナリオの繰り返し数  |
|  持続時間  |  文字通り持続時間 　|

スレッド数10、Ramp-up期間60秒の設定だと60秒かけてスレッドが10立ち上がり、それぞれのシナリオを実行していくことになると思います。
スレッド数10、Ramp-up期間1秒だと一気にスレッドが10立ち上がると思います。

実際は、瞬間的な負荷の場合、持続時間は設定せずループ回数を例えば10とかに設定しスレッド数を徐々に上げて、レスポンスタイムの境界値などを求めるような感じになると思います。

ある程度負荷がかかった状態で別で手操作確認などを行う場合は、ループ回数を設定せず持続時間を設定し、その持続時間の中で手操作を行います。

# ◆バッチ実行

jmeter-n.cmd.bat に作成したテスト計画ファイル（.jmx）をドロップするとコマンドプロンプトで実行され、終了したらプロンプトは閉じられます。
終了後に以下のファイルが出力されますので、そちらを使用し分析を行います。

#### 拡張子jtlファイルから読み取る内容

バッチ実行後に出力される拡張子jtlのファイルをJMeterで開くには、テスト計画に統計レポートを作成しファイルを読み込みます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559029/587755fd-fb16-8f75-7b2e-cfb5c591a083.png" width="80%">

レスポンスタイムの平均はAverageの合計行で確認します。

#### 拡張子logファイルから読み取る内容

実行開始、終了日時などを確認します。