Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用BeanShell预处理器发送JSON对象时出现问题_Javascript_Json_Performance_Jmeter_Jmeter Plugins - Fatal编程技术网

Javascript 使用BeanShell预处理器发送JSON对象时出现问题

Javascript 使用BeanShell预处理器发送JSON对象时出现问题,javascript,json,performance,jmeter,jmeter-plugins,Javascript,Json,Performance,Jmeter,Jmeter Plugins,我想使用BeanShell预处理器将一个JSON对象发送到JMeter中的HTTP请求体。为了对JSON对象建模,我使用java代码(带有一些业务逻辑)。因此,我创建了一个BeanShell预处理器,并编写了如下java代码: import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; String key="testKey"; int lastID=5548;

我想使用BeanShell预处理器将一个JSON对象发送到JMeter中的HTTP请求体。为了对JSON对象建模,我使用java代码(带有一些业务逻辑)。因此,我创建了一个BeanShell预处理器,并编写了如下java代码:

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);
${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'
任何人都可以建议上面的代码有什么问题,以及如何解决相同的问题


如有任何建议或解决方案,我们将不胜感激。

obj2保留数据。使用
obj2
代替
obj1

 vars.putObject("jsonData",obj2);
用于日志转换转置

 log.info(obj1.toString());
  • 您的Beanshell将无法工作,因为它将在这一行失败:

    log.info(obj1); 
    
    因为您将无法将JSON对象打印到日志中

  • 即使围绕HTTP请求采样器工作,也不会因为同样的原因工作:您不能将JSON对象作为主体数据,因为JMeter需要一个字符串
  • ,当你用高线程数运行测试时,这个函数将成为瓶颈,你应该考虑切换到语言。此外,还可以编译和缓存性能良好的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())
    
    import groovy.json.JsonBuilder
    def key='testKey'
    def lastID=5548
    def总计数=198
    JsonBuilder=新的JsonBuilder()
    def数组=[]
    1.最多(总数){
    def taskId=(lastID+“${it}”.toInteger())
    
    array尝试了您的建议,但仍然面临相同的问题回答日志问题