在JMETER中循环通过JSON响应+

时间:2016-06-14 23:07:43

标签: jmeter

我正在使用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语法

1 个答案:

答案 0 :(得分:9)

实际上类似的功能伴随着JSON Path PostProcessor,它出现在JMeter 3.0中。为了获得单个变量中的所有值,请按如下方式配置JSON Path PostProcessor:

  • 变量名称:任何有意义的内容,即id
  • JSON路径表达式:$..id或用于提取ID的任何内容
  • 匹配数字:-1
  • 计算连接var(后缀_ALL):检查

因此,您将获得id_ALL变量,该变量将包含所有JSON路径表达式匹配(以逗号分隔)

更多“通用”答案将适用于任何其他提取器类型,实际上将允许连接任何任意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变量中。有关使用脚本并使用Beanshell测试元素中的JMeter和Java API绕过JMeter限制的更多信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component文章。

演示:

JSON Path + Beanshell demo