gRPCをJMeterで負荷試験するまでの必要なこと

# gRPCをJMeterで負荷試験するまでの必要なこと

gRPCの負荷試験をやるタスクが降ってきたのでやり方をメモします。

### 1. gRPCのサンプルをダウンロードしDockerで実行

@sugiyama404(sugi 404)さんが書かれている[Dockerで始めるgRPC](https://qiita.com/sugiyama404/items/9e4f34c6a21062b2746f)が手軽だったのでそのまま使わせていただきました。

```shell
$ git clone https://github.com/sugiyama404/practice_grpc.git
$ cd practice_grpc
$ docker compose up
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 3/3
 ⠿ Network practice_grpc_default  Created                                                                                                            0.1s
 ⠿ Container server-grpc          Created                                                                                                            0.3s
 ⠿ Container client-grpc          Created                                                                                                            0.3s
Attaching to client-grpc, server-grpc
```

### 2. JMeterをインストール

[JMeter gRPC Request で gRPC リクエストを送る方法とハマった点](https://engineering.mobalab.net/2022/01/17/grpc-request-with-jmeter/)を参考にJMeterとプラグインをインストール。

[JMeter gRPC Requestのプラグイン](https://jmeter-plugins.org/?search=jmeter-grpc-request)をダウンロードし、jmeterを展開したディレクトリで展開。

### 3. JMeterを実行。

```
$ $JMETER_HOME/bin/jmeter.sh
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
```

### 4. JMeter設定

テスト計画に　追加 > Threads　> スレッドグループ　でスレッドグループを追加。

スレッドグループで 追加 > サンプラー　> GRPC Request でGRPC Requestを追加。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284697/f189d1c3-7994-afb0-5062-733025ba4e15.png)



GRPC Requestを選択し、Proto Root Directoryに先ほど git clone したディレクトリ配下の`practice_grpc/server/go_grpc/proto` を指定。
Listingボタンを押下して、helloworld.Greeter/SayHelloを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284697/fec713bd-cc80-21a5-90e8-8bdc15c4f1b8.png)

Send JSON Format With the Requestにリクエストの中身が表示される。

docker psを実行してサーバーのポートを調べる。8080です。

```
$ docker ps
CONTAINER ID   IMAGE                  COMMAND   CREATED          STATUS          PORTS                    NAMES
f042f5d39bbd   practice_grpc-server   "bash"    54 minutes ago   Up 54 minutes   0.0.0.0:8080->8080/tcp   server-grpc
ff45f296cb40   practice_grpc-client   "bash"    54 minutes ago   Up 54 minutes
```

localhostの8080ポートでアクセスできるので、JmeterのWeb Server の Server Name or IPとPort Numberを設定してやる。

こちらのボタンを押すとリクエストが送信される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284697/1df0f2fc-8bf0-87a4-5a9b-82fd8be0d4f2.png)

送信されたことの確認はサーバーのコンテナに入り、

```
$ docker exec -it server-grpc /bin/bash
```

次のコマンドを実行しておく。

```
root@f042f5d39bbd:/practice-grpc# cd go_grpc/
root@f042f5d39bbd:/practice-grpc/go_grpc# go run server/main.go
2023/11/07 08:09:28 server listening at 172.18.0.2:8080
2023/11/07 08:10:04 Received: yuki
2023/11/07 08:38:14 Received: Hello
```