誰にも迷惑をかけずにJMeterを動かす一番シンプルなやり方

JMeterはApacheソフトウェア財団が開発しているオープンソースの負荷検証ツールです。
サーバに対して指定した回数のリクエストを送り、そのレスポンスを受けることで、パフォーマンス計測を行うことができます。

プロキシを使って込み入ったシナリオを作って負荷試験を行うことができるようですが、まだ初心者なのでスモールステップで順に理解しながらやってゆくことにします。

サーバーに負荷をかけるということはサーバーにご迷惑をおかけすることになります。設定を失敗したら叱られてしまいます。なのでまずは自分のPCをWebサーバにしてやってみます。


## 環境
OS：Windows 10 Home 64 ビット オペレーティング システム
CPU：Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz   1.80 GHz
RAM：16.0 GB
DB：Microsoft SQL Server 2012
(SQL Server Management Studio 11.0.2100.60)

## Webサーバを自分で用意する

### IISを有効にする
Windows には Webサービス機能を含むIIS（Internet Information Services）がコンポーネントに含まれています。
これを使ってみます。
IISは標準では“無効”にされているため、導入するには“有効”にする必要があります。

Windowsの[スタート] - [設定] - [プログラムと機能] - [Windows の機能の有効化または無効化] の順に選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/06f842fc-d3fd-20b8-6651-f83b4b967f7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ba42d151-d3fe-159b-4066-777eea4b992c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/2c2ec5e3-847c-55da-b55f-2adfb7388ee8.png)

[インターネットインフォメーションサービス] の□をチェックして■にしてOKボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/5fa2e7fa-2712-6b59-8d16-3c24b0a56fbf.png)

「必要な変更が完了しました。」と表示されればIISの設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/81d729cf-cc9c-24e9-833d-a33c5cf13dc4.png)

なお、この状態だとFTPサーバなどの機能は無効になっていて今回不要なものにはチェックが入っていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/92c06de7-7381-ed9c-7f1f-9143de9910ed.png)

### 自分のWebサービスが動いているかブラウザで表示してみる
Cドライブに \inetpub\wwwroot が生成されていることを確認します。
これがブラウザのURL入力で http://localhost と指定したときにブラウザからのリクエストに応じてWebのコンテンツを送信するルートフォルダとなります。
既に iisstart.htm が生成されていますが、

```
http://localhost/iisstart.htm
```

としなくても

```
http://localhost
```

だけで iisstart.htm の内容がブラウザに表示されることになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ddc4e0e8-c998-3782-1834-a0698ae46328.png)

ではブラウザでURLを入力してみます。
これでJMaterのリクエスト先の（自分の）サーバが正しく動作していることが確認できました。

```
localhost
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/039b813f-5f9c-dae4-31e7-66c150f1292d.png)


## JMaterをダウンロード -> インストール -> 起動
予め Java をインストールしておく必要があります。
[Java Downloads](https://www.oracle.com/java/technologies/downloads/#jdk17-windows)
ではJMaterのダウンロードを始めます。

公式サイト [http://jmeter.apache.org/download_jmeter.cgi](http://jmeter.apache.org/download_jmeter.cgi) の Binaries から zip ファイルをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/de1267b6-441d-95fc-7482-3c6711084877.png)

Zipファイルを任意の場所に展開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/38a4f070-a2a8-03fd-c53a-ff35541e93e4.png)

bin フォルダの下に jmater.bat があるのでこれを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/c7b21248-1e56-a944-a367-e7ae4a72b83a.png)

JMater が起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/c384d08c-fb7a-644c-4221-65e23018ae28.png)

日本語で表示させるためには
[Options] - [Choose Language] - [Japanese] を選択して設定すればいいのですが、毎回この操作をやるのは面倒です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/0b3ab8dd-60f0-edfd-33b6-63a9504bc323.png)


環境変数 JVM_ARGS を設定してjamater.bat を呼び出すバッチファイルを作ってそれを使うことにします。

```jmater_ja.bat
set JVM_ARGS="-Duser.language=ja"
jmeter.bat
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ccc59e56-6bca-798b-7704-53b9689806a3.png)

## テスト計画の作成
### スレッドグループの作成
[テスト計画] - [追加] - [Threads (users)] - [スレッドグループ] を選択実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/31bbb14c-a0b2-caa8-c3a2-20e85b22c831.png)

名前のプリフィックスは「スレッドグループ」となっていますが任意に変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/720bcc9a-4f3d-cf82-3291-236d0d988c98.png)

スレッド数、Ramp-Up 期間(秒)、ループ回数　などの設定値を欲張るとサーバ（ここではJMeterが動作しているPC自体のこと）に負荷をかけすぎることになります。
今回が初めてなので値は1のままでやっておきます。
負荷は様子を見ながら追い追いかけてゆきましょう。

### サンプラーの設定
[スレッドグループ] - [追加] - [サンプラー] - [HTTP リクエスト] を選択実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/bbef5f5b-de6d-3253-fc0c-9aa683f006ad.png)

以下の設定を行います。
プロトコル: http
サーバ名またはIP: localhost
ポート番号: 80
HTTPリクエスト: GET （初期値）
パス: iisstart.htm

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/b36c7684-9426-8aa8-df68-e7031eb1f054.png)

### リスナーの作成
[テスト計画] - [追加] - [リスナー] - [統計レポート] を選択実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/3cdc5e19-df68-30cc-4642-3a2705528586.png)

まだリクエストを開始していないのでレポートには何も表示されていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ce3f782b-9325-6084-c477-56f4085c73ae.png)

### テスト計画の保存
ここでいったんテスト計画を保存しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/63606069-43eb-ff2c-0ad9-63e64b5b5b18.png)

拡張子は jmx となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/a01e66a7-6ea1-1529-65df-4dff9a8a5196.png)

### テストを開始する
[実行] - [開始]
またはアイコンの▶で
開始させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9fad0282-2a77-9abb-b73d-4ca4b003bbba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/9e51b1fa-01ac-31d2-c6e9-964d0bb2c410.png)

エラーなく実行されて統計レポートに表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/be90a957-f5b5-18d8-cde0-1be44e6c03e5.png)

### 設定を変えてテストを行う
ここから先はスレッドグループの設定値を変えてみたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/ea0dd420-bdd8-e436-564a-5a7778315ac3.png)

別のリクエスト先を用意してそちらに向けてテストをしたりしながら、JMeterのしくみを一歩づつ理解してゆくようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/8f0fb794-166f-73e2-c790-11de96b574b7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/81a74b6d-812e-a906-d438-552be7f5c762.png)

## IISを終了させておく
テストが終わったら [コンピュータの管理] - [サービスとアプリケーション] - [インターネット インフォメーション サービス (IIS)マネージャー] からIISを停止させておきます。
テストを再開する場合は「停止」から「開始」に変更するようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225878/8d8d92e9-7932-4726-3af2-cefe8ae463a6.png)

## 参考
[JMeterを使用して負荷テストを効率よく行う](https://qiita.com/kanimisonson/items/922e43dafc2bc484bf69)