当前位置: 首页 > 知识库问答 >
问题:

如何在jmeter中为下一个testcase返回BeanShell后处理程序中的jsonarray

公冶泰
2023-03-14
[{

    "id": "55af0d89ba411ff8b8000680",
},{ 

    "id": "55af0d89ba411ff8b80006bc",      
    "object": {
            "id": "55af0d89ba411ff8b80006bd",
         }
}]
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import java.util.*; 

String response = prev.getResponseDataAsString(); 
JSONParser parser = new JSONParser(); 
JSONArray GroupList = (JSONArray) parser.parse(response); 
Iterator i = GroupList.iterator; 
JSONArray GroupIds = new JSONArray(); 
while (i.hasNext()) 
 { 
 JSONObject objGroup = (JSONObject) i.next(); 
 GroupIds.push(objGroup.get("id")); 
 } 
vars.putObject("GroupIds",GroupIds);

对于下一个测试元素,我创建了foreach循环控制器来循环groupids,但是我在日志中看到,它有如下错误:

jmeter.util.BeanShellInterpreter:调用bsh方法时出错:eval源文件:inline evaluation of:``import org.json.simple.jsonObject;导入org.json.simple.jsonArray;导入组织。...'':类型化变量声明:无法访问字段:迭代器,对象:[{“id”:“55AF0D89BA411FF8B8000680”,“名称”:“公司”,“描述”:“公司联系人”,“类型”:“组”,“created_at”:“2015-07-22T03:27:05Z”,“updated_at”:“2015-07-23T02:45:02Z”,“dominant_gender:"unknown”,“average_age”:“?”},{“id”:“55AF0D89BA411FF8B80006BC”,“名称”:“订阅”,“描述”:“订阅”,“类型::subscriptionList”,“average_age”:“?”,“subscription”:{“id”:“55AF0D89BA411FF8B80006BD”,“name”:“subcription 1”,“form_ids”:[“5526430CBA411FF8C30001CD”]}}]

jmeter.extractor.beanshellPostProcessor:BeanShell脚本org.apache.jorphan.util.jmeterException:调用bsh方法时出错:eval源文件:内联计算:``import org.json.simple.jsonObject;导入org.json.simple.jsonArray;导入组织。...'':类型化变量声明:无法访问字段:迭代器,对象:[{“id”:“55AF0D89BA411FF8B8000680”,“名称”:“公司”,“描述”:“公司联系人”,“类型”:“组”,“created_at”:“2015-07-22T03:27:05Z”,“updated_at”:“2015-07-23T02:45:02Z”,“dominant_gender:"unknown”,“average_age”:“?”},{“id”:“55AF0D89BA411FF8B80006BC”,“名称”:“订阅”,“描述”:“订阅”,“类型::subscriptionList”,“average_age”:“?”,“subscription”:{“id”:“55AF0D89BA411FF8B80006BD”,“name”:“subcription 1”,“form_ids”:[“5526430CBA411FF8C30001CD”]}}]

问题出在哪里?

共有1个答案

甄阳朔
2023-03-14

您的代码几乎没有问题:

  1. iterator i=grouplist.iterator;-需要括号,因为iterator是方法,而不是字段。
  2. groupids.push(objgroup.get(“id”));-将push更改为add,则没有push方法

完整工作代码:

String response = prev.getResponseDataAsString();
JSONParser parser = new JSONParser();
JSONArray GroupList = (JSONArray) parser.parse(response);
Iterator i = GroupList.iterator();
JSONArray GroupIds = new JSONArray();
while (i.hasNext()) {
    JSONObject objGroup = (JSONObject) i.next();
    GroupIds.add(objGroup.get("id"));
}
vars.putObject("GroupIds", GroupIds);
    null

参见Beanshell vs JSR223 vs Java JMeter脚本:您一直在等待的性能下降!文章提供详细的安装说明、脚本编写技巧和技巧以及不同脚本引擎的性能基准。

更新-为ForEach控制器生成变量:

import org.json.simple.parser.JSONParser;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

String response = prev.getResponseDataAsString(); 
JSONParser parser = new JSONParser();
JSONArray GroupList = (JSONArray) parser.parse(response);
for (int i = 0; i < GroupList.size(); i++) {
    JSONObject objGroup = (JSONObject) GroupList.get(i);
    vars.put("Group_" + i, objGroup.get("id"));
}

然后添加一个ForEach控制器,并将其配置为:

    null
 类似资料:
  • 如何更正此代码?谢谢

  • 在日志中获取以下错误: 上的方法:getName() 下面是Beanshell后处理器中使用的代码。

  • 我如何使用beanshell后处理器来分析来自每个请求的数据?我需要分析请求,如果请求通过-写入文件,如果请求失败-写入其他文件。任何机构都可以为这种情况编写简单的示例脚本?

  • 我需要测试rest api发布JSON。我尝试使用JMeter通过BeanShell后处理器发布Json数据。但是BeanShell后处理器不工作或者我写不出正确的代码。 我的Json是:{“email”:“selin@xxx.com”,“password”:“123”} 你可以在下面的图片中看到我做了什么。

  • 问题内容: 有没有办法从一个BeanShell前置/后处理器到另一个BeanShell处理器 (它们在同一个线程组中) 引用变量? 如果我在HTTP Request下的BeanShell PreProcessor中创建一个String变量,那么我可以在同一HTTP Request下的BeanShell PostProcessor中使用或引用该变量。 我尝试通过以下方式访问此变量: + HTTP请求

  • 当我呈现视图时,是,因为是我这样插入它。 如果我提交表单,我将执行以下处理程序: 所以基本上我总是要添加一个`stopmessage,不管是成功还是失败。 如何检索设置到另一个处理程序中的属性值?用胸腺嘧啶有可能吗? 注意:暂时,我将设置为控制器类的一个字段,并在处理程序周围设置/not null,以便始终能够看到它的值。这是一个解决办法,但似乎不是正确的做法。因为我是个新手,所以我很乐意听到处理