首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BeanShell PreProcessor发送JSON对象时发出

使用BeanShell PreProcessor发送JSON对象时发出
EN

Stack Overflow用户
提问于 2017-08-05 18:07:58
回答 2查看 2.7K关注 0票数 3

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

代码语言:javascript
复制
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请求体中,我试图按如下方式获取数据,

代码语言:javascript
复制
${jsonData}

使用上面的代码,它将引发下面的共享错误

请求:

代码语言:javascript
复制
POST data:
${jsonData}

日志中的错误:

代码语言:javascript
复制
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'

有谁能建议上面的代码有什么问题,以及如何解决这些问题?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-05 19:10:28

obj2保存数据。使用obj2而不是obj1

代码语言:javascript
复制
 vars.putObject("jsonData",obj2);

用于日志转换toSring

代码语言:javascript
复制
 log.info(obj1.toString());
票数 1
EN

Stack Overflow用户

发布于 2017-08-07 04:03:05

  1. 您的Beanshell将无法工作,因为它将在这一行失败: log.info(obj1); 因为您无法将JSON对象打印到日志中
  2. 即使您在HTTP请求采样器中使用它,原因也不一样:您不能像JMeter所期望的那样将JSON对象作为主体数据。
  3. Beanshell不是最好的脚本选项。,当您使用大量线程运行测试时,这个函数将成为瓶颈,您应该考虑改用JSR223 PreProcessorGroovy语言。Groovy内置了JSON支持。它的性能更好。作为行为良好的Groovy脚本可以编译和缓存。替换Groovy代码将类似于: 导入groovy.json.JsonBuilder def lastID = 'testKey‘def lastID= 5548 def totalCount = 198 JsonBuilder builder =新JsonBuilder() def数组= [] 1. 1.upto(totalCount,{ def taskId = (lastID + "${it}".toInteger())数组<< getKey:{ key },getTaskId:{ taskId },getTaskOrder:{1 })生成器({ changeControlTasks array.collect() { "snapshotTemplateKey":it.getKey(),"taskId“:it.getTaskId(),"taskOrder“:it.getTaskOrder() } snapshotTemplateKey "testKey”ccName“11”}) vars.put('jsonData',builder.toPrettyString())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45525005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档