Dmitri Tikhanski is a Contributing Writer to the BlazeMeter blog.

Learn JMeter in 5 Hours

Start Learning
Slack

Test Your Website Performance NOW!

May 11 2016
En

JMeter の JSON パス エクストラクタ プラグイン - 高度な使用シナリオ

この投稿では、以前に JSON パス エクストラクタのこのブログで扱った内容をより広範にお伝えします。JSON パス エクストラクタ は、JSON 応答から値を抽出できるようにする JMeter プラグインです。ここでは、配列の操作、条件付き選択、および単一の JSON パス クエリによる複数の値の選択に関係するシナリオについて詳しく説明します。

 

JMeter ユーザ - バックグラウンドを少し

 

増え続ける多数の Web サイトおよびアプリケーションは、クライアントおよびサーバ データの交換を容易にする REpresentational State Transfer (別名 RESTful)アーキテクチャの上に構築されています。最も一般的に使用されるデータ形式は、JSON (JavaScript Object Notation)です。これは、JavaScript から派生した言語で、人間が簡単に読み取り可能な名前/値ペアで構成されています。

 

これは、JSON を使用する Web サイト/アプリケーション上でテストを実行しようとしている JMeter ユーザに対してどのような意味があるでしょうか。

 

最初に、JSON データを正しく送信できるようにする追加の設定が必要です(「application/json」の値を持つ「Content-Type」ヘッダを送信するために HTTP ヘッダ マネージャを使用します)。さらに、応答が予想と一致するかどうかを確認するか、または後の再利用(つまり、相関)に対する応答の重要かつ動的な部分を抽出できるようにする JSON 応答を「読み取る」機能も重要です。

 

これらの理由から、JSON パス エクストラクタ プラグインが作成されました。これは、JSON 応答に対する JSON パス式を実行する便利なツールであり、JMeter 変数に結果を格納します。

 

インストール プロセス、基本ユース ケースおよび構文は、「Using the XPath Extractor in JMeter (JMeter での XPath エクストラクタの使用)」ガイド(「Parsing JSON (JSON の解析)」セクションまでスクロールダウンします)のブログですでに説明しています。

 

この投稿では、配列の操作、条件付き選択、および単一の JSON パス クエリによる複数の値の選択など、より高度なシナリオについて説明します。

 

以下の JSON 構造は、例のいずれかを再現する場合のすべてのデモンストレーションに対して使用されます。

{
  "employees": [
    {
      "firstName": "John",
      "lastName": "Doe"
    },
    {
      "firstName": "Anna",
      "lastName": "Smith"
    },
    {
      "firstName": "Peter",
      "lastName": "Jones"
    }
  ],
  "city": "Castle Rock",
  "state": "Maine"
}

 

さらに、以下のテスト要素が役に立つ可能性があります。

 

  • Dummy Sampler - デバッグに役立ちます。任意のデータを[Response Data]フィールドに入力し、JSON パス エクストラクタをダミー サンプラの子にして、サーバに追加要求を送信しないようにすることができます。

  • Debug Sampler - JMeter 変数の値を出力します(また、JMeter およびシステム プロパティを印刷することもできます)。

  • View Results Tree - ダミーおよびデバッグ サンプラの出力を視覚化します。

 

[Test Plan]構造の例:

 

JMeter JSON パス エクストラクタのテスト計画の例

 

JSON 配列

 

配列の操作について考えてみましょう。たとえば、応答から「John」という名前を取得する必要があります。以下の JSON パス エクストラクタの設定を使用する場合、

 

  • 送信先変数名: firstName

  • JSONPath 式: $..firstName

 

以下の変数が取得されます。

 

firstName=["John","Anna","Peter"]
firstName_1=John
firstName_2=Anna
firstName_3=Peter
firstName_matchNr=3

 

オプションは次のとおりです。

 

  1. ${firstName_1} 参照を使用して、「John」を取得します。

  2. JSON パス式を変更し、結果の配列メンバのゼロベースのインデックスを含めます。$..firstName[0] その場合は、単一の一致が取得されます。

 

firstName=John

 

応答配列のメンバが 1 つだけある場合に、この [0] ヒントを使用する際は、[John] のように角かっこで取得することを覚えておいてください。配列識別子を削除するゼロ インデックスを入力することで、「interesting」という文字列値だけになります。

 

条件付き選択

 

その他の値に依存する JSON 応答から値を取得する、つまり、「lastName」が「Smith」である「firstName」を取得する必要がある場合は、JSON パス フィルタ式を使用することもできます。

 

以下の JSON パス構文要素が必要になります。

 

  • ?() - フィルタ関数

  • @ - 現在のオブジェクト

 

「LastName」属性が「Smith」と等しい要素を取得する必要がある場合、式は以下のようになります。



$..[?(@.lastName == 'Smith')]

 

また、可読性を高めるために、親エレメント名を持つワイルドカードを次のように置き換えることができます。

 

$.employees[?(@.lastName == 'Smith')]

 

取得できる内容を見てみましょう。

 

JMeter JSON パス エクストラクタによる Smith の条件付き選択

 

ここまでで、「not interesting」の従業員を除外しました。ここからは、以下のようにクエリに .firstname を追加して Mrs. Smith の名前を取得しましょう。

 

$.employees[?(@.lastName == 'Smith')].firstName

 

JMeter JSON パス エクストラクタによる Anna Smith の条件付き選択

 

ご覧のとおり、[“Anna”] を取得しています。これが、以前に説明した可能性です。角かっこおよび引用符を削除するために、最初の配列メンバのみを取得するように JMeter に指示します。.[0] を式に追加するために、配列メンバのインデックスはゼロベースであることを覚えておく必要があります。

 

最終バージョンは以下のようになります。

 

$.employees[?(@.lastName == 'Smith')].firstName[0]

 

以下のようになります。

 

JMeter JSON パス エクストラクタによる最終バージョンの条件付き選択

 

1 つの式での複数の値の選択

 

JSON パス エクストラクタの数を減らす必要がある場合は、1 つの操作でいくつかの値を抽出することもできます。複数の値を取得するには、[,] 共用体オペレータを使用します。

 

それでは、単一クエリで「state」と「city」の両方の要素の値を取得しましょう。JSON パス エクストラクタを以下のように設定します。

 

  • 参照名: 意味のある任意の名前、つまり、場所

  • JSON パス式: $.[state, city]

 

JMeter - JSON パス エクストラクタ - 1 つの式での複数の値

 

ご覧のとおり、JSON パス エクストラクタは単一クエリで両方の要素をキャプチャします。これらは配列形式になっています(配列の操作は上記で説明しました)。

 

JSON パス エクストラクタについてはほとんど網羅したでしょうから、これで大丈夫でしょう。問題がまだ発生する場合、ご質問がある、またはあらゆる形式のフィードバックを共有したい場合は、以下のディスカッション フォームを使用してください。

 

JMeter の経験が豊富なユーザであり、詳細情報がさらに必要ですか。

 

オンデマンド Web キャスト「How to Create Advanced Load Testing Scenarios with JMeter (JMeter を利用して高度なロード テスト シナリオを作成する方法)」を視聴してください。

 

さらに、BlazeMeter クラウドのスケール設定とレポート作成で JMeter を別のレベルに引き上げるための詳細については、1 対 1 のデモを予約してください。

 

一対一のデモセッションを予約いただくと、BlazeMeter の機能について説明を受けることができます。

     
arrow Please enter a valid URL

Interested in writing for our Blog?Send us a pitch!

We're working on starting your first test

Testing 20 Virtual Users

Starting your test in around 2-4 minutes. Your report will appear once we've gathered the data.

0

Status: Preparing Your Test

Your email is required to complete the test. If you proceed, your test will be aborted.