2017-08-05 4 views
1

BeanShellプリプロセッサを使用してJMeterのHTTPリクエスト本体に1つのJSONオブジェクトを送信したいとします。 JSONオブジェクトをモデル化するには、(ビジネスロジックを使用して)Javaコードを使用しています。そこで私は、1 BeanShellのプリプロセッサを作成し、次のようにJavaコードを書いて、BeanShellプリプロセッサでJSONオブジェクトを送信する際の問題

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

    String key="testKey"; 
    int lastID=5548; 
    int totalCount=198; 
    JSONObject obj1 = new JSONObject(); 
    JSONArray obj2 = new JSONArray(); 
    for (int i=1;i<=totalCount;i++) 
    { 
     JSONObject item = new JSONObject(); 
     item.put("taskId", Integer.toString(lastID+i)); 
     item.put("taskOrder",1); 
     item.put("snapshotTemplateKey",key); 
     obj2.put(item); 
     obj1.put("changeControlTasks", obj2); 
     obj1.put("ccName","Eleven"); 
     obj1.put("snapshotTemplateKey",key); 
    } 
    log.info(obj1); 
    vars.putObject("jsonData",obj1); 

そして、HTTPリクエストボディに、私は次のようにデータをフェッチしようとしています、上記のコードでは

${jsonData} 

目で

POST data: 
${jsonData} 

エラー:これは、以下の共有エラー

リクエストを投げています電子ログ:

2017/08/06 07:27:10 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval 
Sourced file: inline evaluation of: ``import org.json.JSONArray; import org.json.JSONException; 
import org.json.JSONOb . . . '' : Error in method invocation: Method info() not found in class'org.apache.log.Logger' 

は、いずれも上記のコードとどのように同じことを解決するためにの問題が何であるかを示唆することはできます。

いずれの提案または解決策も認められるであろう。

答えて

0

obj2はデータを保持します。あなたのそれは、このラインに失敗するとBeanShellのは動作しません

log.info(obj1.toString()); 
+0

はまだなぜあなたはdownvoteでしたログ問題 –

+0

は、エラーメッセージ –

+0

で質問を更新し、同じ問題に直面して、あなたの提案をしようとしましたか? – user7294900

0
  1. ログコンバートtoSringについて

    vars.putObject("jsonData",obj2); 
    

    :あなたと

    log.info(obj1); 
    

    obj2代わりにobj1を使用しますログにJSONオブジェクトを印刷することはできません

  2. あなたのHTTPリクエストサンプラーの周りに働く場合であっても、同じ理由で動作しません:JMeterのが文字列
  3. Beanshell is not the best scripting optionを期待して、あなたは身体データとしてJSONオブジェクトを置くことができない、あなたとあなたのテストを実行するとスレッドの数が多い場合、この機能がボトルネックになるため、代わりにJSR223 PreProcessorGroovy言語に切り替えることを検討する必要があります。 Groovy has built-in JSON supportits performance is much betterは、適切に動作するGroovyスクリプトをコンパイルしてキャッシュすることができます。 Groovyのコードのようなものになるだろう置換:

    import groovy.json.JsonBuilder 
    
    def key = 'testKey' 
    def lastID = 5548 
    def totalCount = 198 
    
    JsonBuilder builder = new JsonBuilder() 
    
    def array = [] 
    1.upto(totalCount, { 
        def taskId = (lastID + "${it}".toInteger()) 
        array << [getKey: { key }, getTaskId: { taskId }, getTaskOrder: { 1 }] 
    
    }) 
    
    builder(
         { 
          changeControlTasks array.collect() { 
           [ 
             "snapshotTemplateKey": it.getKey(), 
             "taskId"    : it.getTaskId(), 
             "taskOrder"   : it.getTaskOrder() 
           ] 
          } 
          snapshotTemplateKey "testKey" 
          ccName "Eleven" 
         } 
    ) 
    
    vars.put('jsonData', builder.toPrettyString()) 
    
関連する問題