JMeterでCOTOHA-APIを動作してみました

#1．概要

AIの勉強のためにCOTOHA-APIを動作して学んでいました。その中で、過去にJMeterを用いてAPIのテストをしたことがあり、COTOHAも動かせるのではないかと考えチャレンジしてみました。

#2．環境用意

以下の記事を参考にJMeterがインストールされ、動作していることが前提となります。
[「負荷テスト・パフォーマンス測定ツールのJMeterのインストールと簡単な使い方」](https://qiita.com/PlanetMeron/items/a604645d6f89b6ce3a14)

■実施環境
OS：Windows10
Java：openjdk version "14.0.1"
JMeter：5.2.1

#3．アクセストークン用の設定

COTOHA-APIを動作するには、まずアクセストークン（期限付きのパスワードのようなもの）を発行させる必要があります。以下が発行に必要な設定となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/8420a4b3-0264-415c-13ad-f505b7b38932.png)

1. テスト計画で右クリックから「追加＞Threads（Users）＞スレッドグループ」を選択
2. スレッドグループで右クリックから「追加＞設定エレメント＞HTTPヘッダマネージャ」を選択
3. スレッドグループで右クリックから「追加＞サンプラー＞HTTPリクエスト」を選択
4. スレッドグループで右クリックから「追加＞リスナー＞結果をツリーで表示」

※スレッドグループの設定は初期値のままで進めてください。

HTTPヘッダーマネージャについては、以下のように設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/6e52cf98-8c06-29a0-a581-61dd9180bef7.png)

追加を押下し、名前に「Content-Type」、値に「application/json」を記載してください。

HTTPリクエストについては、以下のように設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/b77b4c3a-629f-720f-d418-cb30b0e7f3bf.png)

`プロトコル：https
サーバ名またはIP：api.ce-cotoha.com
ポート番号：443
メソッド：POST
パス：v1/oauth/accesstokens`

Body Dataを選択し以下を入力

	{
	"grantType":"client_credentials",
	"clientId": "ログイン後の画面に表示されるClient ID",
	"clientSecret": "ログイン後の画面に表示される Client Secret"
	}



上記設定後に画面上部の緑の三角ボタンを押下するとAPIが動作し、「結果をツリーで表示」に以下レスポンスが返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/2e9bf408-1ca6-5ffe-6054-cf1057af5dd3.png)

上記の「access_token」をメモしてください。


#4．JMeterで構文解析APIを動作してみました

構文解析APIを動作するには3章の設定から、以下のように変更する必要があります。
まず、HTTPヘッダマネージャに3章で発行したパスワードを追記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/2cf49936-974f-7ff3-0f47-3295f21d5c3e.png)

追加ボタンを押下し名前に「Authorization」、値を「Bearer 3章でメモしたaccess_token」を記載してください

次にHTTPリクエストの内容を以下のように変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/b72fd7b8-3c31-6d33-b7ed-f940a4a28c03.png)

`パス：api/dev/nlp/v1/parse
Content encoding：UTF-8`

Body Dataに解析したいデータを入力します。例では以下のように入力しています。

	{"sentence":"吾輩は猫である。名前はまだない。"}


上記を実施すると以下のような結果が返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/7f09b078-87eb-d963-7b2e-15bba26e8f88.png)

#5．CSVファイルから解析データをアップロード

##5.1　アップロードの方法

今度はCSVファイルから解析に必要なデータをアップロードしてみます。まずは、以下のようなCSVファイルを用意しました。（ファイル名を「吾輩は猫である.csv」として、JMeterのbin配下に置いておきます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/6e858012-067c-3f91-23aa-44d94eb60052.png)


次にスレッドグループで右クリックを行い「追加＞設定エレメント＞CSV Data Set Config」を選択し、以下のように入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/5637beac-3acd-fa65-b83c-f3206b5b63d1.png)

`Filename：吾輩は猫である.csv`
（作成したCSVファイルのファイル名を記載してください。対象のファイルをJMeterのbin配下に置いていない場合は、参照ボタンを押してファイルの参照先を選択してください。）
`File encoding：UTF-8
Varable Names：test`

スレッドグループの設定画面を表示して、以下のように入力してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/36f5f69a-222c-bc02-5380-0730014be816.png)

`スレッド数：4（設定したデータの数を入力する）
Ramp-Up期間：4（スレッド数と同じ数値）`

上記のように入力すると、入力データを1秒ごとに送信するようになります。（COTOHA-APIの性能はわかりませんが、Ramp-Up期間を短くするとデータの送信スピードが速くなるので、**エラーが返ってくる**可能性が高くなります。）

HTTPリクエストは以下のように変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/1fa5dc47-8e85-4666-ac59-0bf1932b45f6.png)

	{"sentence":"${test}"}

上記を設定し、実施すると以下のような結果が返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/b76be6b7-bfe6-3a74-9f29-a9a9334b7f31.png)

各データをそれぞれ送信しているので、4つ返信が返ってきており、「応答データ＞Responser Body」を選択するとその返信データの中身をみることができます。

##5.2　CSVファイルの読み込み方法

CSVファイルは以下のように読み込まれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547663/2cc0b94d-20ea-b2f1-4f66-6e7eec7b2e0e.png)

「CSV Data Set Config」の設定で「Variable Names」に「test」という値を設定しました。これは、A列の値を「test」という変数に代入したという意味になります。

B列以降のデータを使いたい場合は、B列以降にデータを挿入し「Variable Names」に「test1,test2,test3...」という形で変数を定義すれば、利用可能となります。