Apache JMeterの導入と使用方法

業務でApache JMeterを使用する機会があったので、備忘録として書きます。

## 目次
1. 対象者
2. 環境
3. Apache JMeterとは
4. 事前準備 
4. JMeterインストール
4. 使用方法

## 対象者
- 負荷テストにApache JMeterを使用したい方
- 初めてApache JMeterを使用する方

## 環境
- mac

## Apache JMeterとは
Apache Software Foundationが開発したオープンソースの負荷テストツールです。主にWebアプリケーションの性能テストを行うために使用され、ユーザーの行動をシミュレートして大量のリクエストをサーバーに送り、そのレスポンスタイムや性能を測定できます。

## 事前準備
JMeterは、jarファイル起動のため、JDKを入れる必要があります。インストール済みの人は飛ばしてください。
今回はhomebrewでインストールします(homebrewインストールは省略します)。
```
# パッケージの情報を最新に更新
$ brew update

# Javaの現在のインストール状況確認
$ brew info java
openjdk: stable 20.0.1 [keg-only]
Development kit for the Java programming language
https://openjdk.java.net/
Not installed

# Javaインストール
$ brew install java
# macOSのシステムがJDKを認識できるようにシンボリックリンクをはります
$ sudo ln -sfn $(brew --prefix)/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

$ java --version
openjdk 20.0.1 2023-04-18
OpenJDK Runtime Environment Homebrew (build 20.0.1)
OpenJDK 64-Bit Server VM Homebrew (build 20.0.1, mixed mode, sharing)
```

## JMeterインストール
今回は公式HPからzip形式のファイルを落として解凍する方法を記載します。他にもhomebrewからインストールできます。

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

apach-jmeter-✳︎.✳︎.zipを選択し、インストールしダブルクリック（解凍）
![スクリーンショット 2023-07-09 20.07.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/f59402be-e36d-a83a-9814-2c8c1de99a2a.png)
任意のフォルダに移動
![スクリーンショット 2023-07-11 23.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/c62f9474-5433-4dab-302d-5d5f85824359.png)
bin¥ApachJMeter.jarをダブルクリックしてJMeterが起動します。
![スクリーンショット 2023-07-11 23.06.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/b760ff61-acc3-ca0a-1f82-1a287c5d2deb.png)

## 使用方法
負荷テストで単純なHTTPリクエストをテストすることもありますが、今回はパス、パラメータの動的、CSVファイルを出力させる機能のテストのため、その方法を記載しています。

静的なHTTPリクエスト、パス、パラメータをテストしたい場合は下記の記事を参考にしてください。
https://tech-blog.rakus.co.jp/entry/2017/08/24/111332


### パラメータを動的にしたい場合
（例：{"user_id:*******"}）
以下が作業の流れになっています。テキストファイルでもできますが、今回CSVファイルで設定しています。
今回は動的にuser_idを1、2、3、4、5に変更する方法を記載します。
スレッドグループの作成方法は上記記事を参考にしてください。
1 . CSVファイルの作成
![スクリーンショット 2023-07-15 19.10.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/7d019e8a-9168-70e1-b2e4-56de865c1d01.png)
2 . CSVデータセット構成要素の設定

スレッドグループの上で右クリック→以下のキャプチャより『CSVDatasetConfig』を押下
![スクリーンショット 2023-07-15 19.15.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/1da9568b-79a9-e9b7-d3b7-0b3375a48a20.png)
設定内容
Filename:『1.CSVファイルの作成』で作成CSVファイルのパスを指定
File encoding:UTF-8
Ignore first line:今回CSVファイルの1行目にヘッダーを入れたため、True

![スクリーンショット 2023-07-15 19.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/8460ed3b-732e-089f-d101-e1ff44c1ae5d.png)
3 . HTTPリクエストの設定
スレッドグループの上で右クリック→以下のキャプチャより『HTTPリクエスト』を押下
テストに合わせて設定を追加してください。
![スクリーンショット 2023-07-15 19.17.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/0d173b50-1623-e638-b1ed-6200d968d5d8.png)
HTTPリクエストのBodyDataにパラメータを設定。CSVファイルのデータを入れたい部分に${user_id}と記載。![スクリーンショット 2023-07-15 19.31.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/0c834ce5-03ca-c612-b04d-c02e96964a3a.png)

### パスを動的にしたい場合
（例：`https://123456/user/(userid)/delete`）
パラメータを動的にしたい場合と同様、CSVファイル、CSVデータセット構成要素の設定をします。
違う点はHTTPリクエストの設定です。
CSVファイルではパスを設定します。
![スクリーンショット 2023-07-15 19.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/5d2110b9-02c3-173a-a7e8-29a7d63895c5.png)
![スクリーンショット 2023-07-15 19.36.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/0c9e97a7-4633-c763-b07f-e4f65ee949b2.png)


### CSVファイルを出力させるAPIの場合

1 . HTTPリクエストの設定：
- スレッドグループ内にHTTPリクエストを追加します。このリクエストはCSVファイルを出力するAPIエンドポイントを指定します。
- 必要なヘッダー、パラメータ、ボディデータなどをリクエストに追加します。

3 . CSVデータセット構成要素の設定：
- CSVデータセット構成要素を追加します。
- 「Filename」フィールドにはCSVファイルのパスを指定します（例: /path/to/output.csv）。
- 「Variable Names」フィールドには、CSVファイルに出力するデータを指定します（例: response_data）。
![スクリーンショット 2023-07-15 19.44.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/93e2d424-2c97-de0a-aa62-cc35eaba89d2.png)


4 . View Results Treeリスナーの設定:

- テスト計画にView Results Treeリスナーを追加します。
- View Results Treeリスナーは、リクエストとレスポンスの詳細な情報を表示し、CSVファイルに出力するために使用します。
- 「Filename」フィールドには出力するCSVファイルのパスを指定します（例: /path/to/output.csv）。![スクリーンショット 2023-07-15 19.47.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660432/dc056cdb-c329-f234-0d71-6d989d46fd9b.png)


以上が、JMeterの基本的な導入と使用方法になります。これを基に、自分の実施したいテストの設定を追加してみてください。