2017-02-28 83 views
1

jmeterでBeanshellアサーションを使用してJsonレスポンスをアサートしようとしています。以下は私のコードです。jmeterでBeanshellを使用してJSON応答を検証する

import org.json.JSONObject; 
import org.json.JSONArray; 
import java.lang.String; 
import org.apache.log.Logger; 

try{ 
    String jsonString = prev.getResponseDataAsString(); 
    JsonObject jsonobj = JsonObject.readFrom(jsonString); 
    JsonArray jsonarr = jsonobj.get("items").asArray(); 
    String pickup = jsonarr.get(2).asObject().get("CM_NAME").asString(); 
    log.info(pickup); 
} 
catch(Exception e) 
{ 
log.info("beanshell Exception "+e.getMessage()); 
} 

は、ここで私は私が次のスクリプトを取得するスクリプトを実行した後

$.items[2].CM_NAME 

を検証する必要がJSON形式のパスです。

アサーションエラーメッセージ:org.apache.jorphan.util.JMeterException:BSHメソッドを呼び出す エラー:evalのソースとなるファイル:のインライン評価: ``輸入org.json.JSONObject。 import org.json.JSONArray; import java.lang.String; 。 。 。 '':型指定された変数宣言:クラス: JsonObject名前空間

では見られない、私はJMeterのバージョン2.11を使用しています。誰でも私のスクリプトが正しく動作するように助けてくれますか?私のコードは正しいですか?

答えて

1

代わりにJsonPathを使用することをお勧めします。これはあなたがしたいことを正確に実行しています。

また、すでにこのライブラリをクラスパスに組み込んだJMeter 3.1にアップグレードするか、JARファイルをダウンロードして/ lib/extに入れます。

完全なコード例:

import com.jayway.jsonpath.JsonPath; 

String author0 = JsonPath.read(document, "$.store.book[0].author"); 
Failure = !"John Smith".equals(author0); 
if (Failure) { 
    FailureMessage = "Expected John Smith as author"; 
} 
+0

はありますがbeanshellアサーションを使用して実装する可能性があります。 – Sjadhav

+0

確かに、ライブラリを使ってレスポンスからチェックするために内容を抽出し、次にこのような条件をチェックしてください:if(!条件)IsSuccess = false; –

+0

上記の例やコードで使用できるインポート(私は2.11バージョンを使用しています)を手伝ってもらえますか?また、JsonPathはMavenリポジトリからダウンロードしなければならないJarです。 – Sjadhav

1

あなたが本当にあなたは(JMeter Classpathrelevant JSON libraryどこかを持っていることを確認する必要があり、この道を行くしたい場合、通常はJMeterのの「LIB」フォルダにjarファイルをドロップするのに十分であると


    は今後)それを拾うためのJMeterを再起動私のような異なるアプローチを使用することをお勧めします

  1. JSON Path AssertionJMeter Pluginsで利用可能な場合は、そこにJSON Pathクエリを直接使用できます。あなたはJSR223 AssertionからJMeter Plugins Manager

    JSON Plugins JMeter Plugin Manager

  2. スイッチとGroovy言語を経由してJSONパスアサーションをインストールすることができます。 Groovyにはbuilt-in JSON supportがありますので、余分なライブラリは必要ありません。

    { 
        "items": [ 
        { 
         "CM_NAME": "foo" 
        }, 
        { 
         "CM_NAME": "bar" 
        }, 
        { 
         "CM_NAME": "baz" 
        } 
        ] 
    } 
    

    と次のGroovyのコード使用してそれを行うことができますbaz値を抽出する必要があります:たとえば次のようなJSONレスポンスを持っている場合

    def response = SampleResult.getResponseDataAsString() 
    def json = new groovy.json.JsonSlurper().parseText(response) 
    
    log.info(json.items[2].CM_NAME) 
    

    Groovy JSON Example

+0

jmeterの新機能ですので、JSR223アサーションでこの問題をどのように修正できるか教えてください。 – Sjadhav

+0

例を含めるように私の答えを少し更新しました。これをチェックしてください。また、[Groovy is New Black](https://www.blazemeter.com/blog/groovy-new-black)の記事に精通しておくことをお勧めします –

関連する問題