2016-06-14 18 views
3

に、私はパフォーマンステストのためのJMeterを使用していますが、次の点で立ち往生:次のように私はWEBAPIからのJSONレスポンスを取得しています :JSONレスポンスをループ+ JMeterの

PersonInfoList: 
Person 
[0] 
{ 
    id: 1 
    name: Steve 
} 
[1] 
Person 
{ 
    id: 2 
    name: Mark 
} 

私はIDが基づいて取得する必要があります("Expected value" = 1,2

私はJSONポストプロセッサまたはRegexプロセッサを使用して特定の要素を読み取る方法を知っていますが、配列をループしてそのように文字列を作成できません私は次のサンプラー要求でこの値を使うことができます。

私はJmeter 3.0を使用しています。これは外付けのサードパーティ製のライブラリを使用せずに実現できれば偉大になるでしょう。上記のJSON構文に申し訳ありません

答えて

7

実際には、JMeter 3.0に登場したJSON Path PostProcessorという機能があります。単一の変数のconfigure JSONパスポストプロセッサのすべての値を取得するためには、次のように:

  • 変数名:意味のある何かを、すなわちid
  • JSONパス式:$..idか、IDを抽出するために使用するものは何でも
  • マッチ番号:-1
  • 計算連結VAR(接尾辞_ALL):結果

をチェックしますid_ALL変数Wを取得します(コンマで区切られた)すべてのJSONパス式の一致が含まれます

その他の抽出タイプにも適用可能で、任意のJMeterを連結することができます。 『単一の文字列にどこかにJSONパスの後処理の後BeanShellのポストプロセッサを追加し、次のコードを入れて『IDスクリプト』エリアこの「名前で始まるすべての変数を連結するために期待値と括弧)

StringBuilder result = new StringBuilder(); 
result.append("(\"Expected value\" = "); 
Iterator iterator = vars.getIterator(); 

while (iterator.hasNext()) { 
    Map.Entry e = (Map.Entry) iterator.next(); 
    if (e.getKey().matches("id_(\\d+)")) { 
     result.append(e.getValue()); 
     result.append(","); 
    } 
} 
result.append(")"); 
vars.put("expected_value", result.toString()); 

上記のコードは結果の文字列を保存しますJMeter変数に${expected value}を入力します。スクリプトを使用してJMeterの制限をバイパスし、Beanshellのテスト要素からJMeterとJava APIを使用する方法の詳細については、How to Use BeanShell: JMeter's Favorite Built-in Componentの記事を参照してください。

デモ:

JSON Path + Beanshell demo

+0

は私がちょうどJSON PATHのポストプロセッサを使用してこれを実現することができることを知りませんでした。正規表現をMatch -1で使用し、すべての変数を取得したら、Beanshellプロセッサを使用して連結しました。ポスト思考をありがとう。それは役に立ちました。 – Dee