在JMETER中循环遍历JSON响应+

我正在使用Jmeter进行性能测试,并停留在以下几点:我从Webapi收到JSON响应,如下所示:

PersonInfoList:
Person
[0]
{
  id: 1
  name: Steve
}
[1]
Person
{
  id: 2
  name: Mark
}

我需要根据此JSON数组的计数获取ID,并以逗号分隔的字符串创建为("Expected value" = 1,2

我知道如何使用JSON Post处理器或Regex处理器读取特定元素,但无法遍历数组并按说明创建字符串,因此我可以在下一个采样器请求中使用此值。

请帮我解决这个问题:我正在使用Jmeter 3.0,并且如果不使用外部第三方库就可以实现这一点,那就太好了。抱歉,上面的JSON语法

德米特里

实际上,JMeter 3.0中出现的JSON Path PostProcessor具有类似的功能为了获取单个变量中的所有值,请按如下所示配置JSON Path PostProcessor:

  • 变量名:任何有意义的名称,即 id
  • JSON路径表达式:$..id或用于提取ID的任何东西
  • 比赛号码:-1
  • 计算串联变量(后缀_ALL):检查

结果,您将获得id_ALL包含所有JSON Path表达式匹配项(以逗号分隔)的变量

更多“通用”答案将适用于任何其他提取器类型,并且实际上允许连接使用脚本编写的任意JMeter变量(如果需要此“期望值和括号”,则除外)

为了将名称以“ id”开头的所有变量连接到单个字符串中,请在JSON Path PostProcessor之后的某个位置添加Beanshell PostProcessor,并将以下代码放入“脚本”区域

StringBuilder result = new StringBuilder();
result.append("(\"Expected value\" = ");
Iterator iterator = vars.getIterator();

while (iterator.hasNext()) {
  Map.Entry e = (Map.Entry) iterator.next();
  if (e.getKey().matches("id_(\\d+)")) {
      result.append(e.getValue());
      result.append(",");
  }
}
result.append(")");
vars.put("expected_value", result.toString());

上面的代码会将结果字符串存储到${expected value}JMeter变量中。有关使用脚本绕过JMeter限制以及使用Beanshell测试元素中的JMeter和Java API绕过JMeter限制的更多信息,请参见如何使用BeanShell:JMeter的“最喜欢的内置组件”文章。

演示:

JSON路径+ Beanshell演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章