JmeterでJsonレスポンスの特定の値をGsonライブラリを使用して抽出する

Jmeterとは?

JMeterとは、Apacheが開発・提供しているオープンソースのソフトウェアで、主にwebアプリケーションやwebサービスに対する負荷テストやパフォーマンステストを行うためのツールです。

Jmeterでシナリオ(テストケース)を作成することが可能で、作成したシナリオを用いて特定のwebサーバーやアプリケーションに対して、同時に多数のユーザーがアクセスした場合の負荷テストやパフォーマンステストを実施することができます。

JavaライブラリGson

JmeterでJsonレスポンスの値を取り出すために利用するライブラリはGsonと言うJava言語のライブラリを使用します。

Gsonライブラリとは、Googleが開発したJava用のオープンソースライブラリで、JavaオブジェクトJSONデータ形式との相互変換を簡単に行うためのツールです。

Jsonデータから、特定の値を抽出するようなケースにも利用可能なので、JmeterでJsonレスポンスから値を抽出するケースにも対応させることができます。

JmeterでJsonからデータを抽出する方法として、正規表現の後処理を適応する方法が多く紹介されておりますが、正規表現を用いた抽出は何を抽出しているかがわかり辛いので、BeanShell PostProcessorを適応し、Gsonライブラリでスクリプトを記述するほうが何を抽出しているのかがわかりやすいと考えます。

JmeterでJavaライブラリを使用する方法

JmeterでJavaライブラリを使用する方法は、対象ライブラリのパッケージファイル(jarファイル)をlib/ext ディレクトリに配置する必要があります。

Homebrewでjmeterをインストールしている場合、下記のようなパス配下にjarファイルを配置することになります。

/usr/local/Cellar/jmeter/5.6.2/libexec/lib/ext/

Gsonを使用したJsonレスポンスの抽出方法

以降の説明では、下記のようなJsonレスポンスから「traget_id」の値を抽出してみたいと思います。

{
    "status": {
        "code": 200,
        "message": "",
        "errors": []
    },
    "data": {
        "target_id": "15"
        "last_name": "手素斗",
        "first_name": "太郎",
        "last_name_kana": "テスト",
        "first_name_kana": "タロウ",
        "email": "test@example.com",
        "permission": 4,
    }
}

JmeterでGsonを使用可能にする

下記のサイトからGsonのjarファイルをダウンロードして、lib/ext配下にjarファイルを設置してください。

ダウンロードサイト

※jarファイル設置後、jmeterを再起動する必要があります。

BeanShell PostProcessorでスクリプトを記述する

結果の抽出を行いたいHTTP RequestにBeanShell PostProcessorの後処理を追加します。

BeanShell PostProcessorでスクリプトを記述する

BeanShell PostProcessorの追加が行えたら、下記の通りにスクリプトを記述します。

import com.google.gson.Gson;
import com.google.gson.JsonObject;

// JSONレスポンスを取得
String jsonResponse = prev.getResponseDataAsString();

// Gsonインスタンスを作成
Gson gson = new Gson();

// JSON文字列をJsonObjectにパース
JsonObject jsonObject = gson.fromJson(jsonResponse, JsonObject.class);

// JSONから特定の値を取得してユーザー定義変数に格納
targetId = jsonObject.getAsJsonObject("data").get("target_id").getAsString();
vars.put("targetId", targetId);

上記のBeanShell PostProcessorが後処理で動くことによって、変数targetIdに抽出結果を保存しているため、以降の処理で変数経由で値を取得することが可能になります。

まとめ

Jmeterは負荷テスト等で利用することが多いと思いますが、中でも、JsonレスポンスのAPIをテストする場合に、レスポンス結果から特定の値を抽出し、以降のプロセスで抽出した値を使用したいケースではGsonライブラリを利用することで簡単にJsonレスポンスを抽出することができます。

Gsonライブラリだけでなく、Jmeterでは自作のスクリプトでJavaライブラリを使用したい場合に、lib/ext配下にjarファイルを配置すると使用することが可能になるため、覚えておくと煩わしいシナリオ作成が少し楽になるかもしれませんね。

※jarファイルをlib/ext配下に設置後はjmeterの再起動を忘れずに!

JmeterでJsonレスポンスの特定の値を抽出して以降のプロセスで使う方法
最新情報をチェックしよう!