jmeter json 路径 bean post 处理器

jmeter json path bean post processor

我使用 JSONPath 提取器

从响应中提取了以下条目
entries = ["e-1553","e-1552","c-1052","e-1551","c-1050",
           "e-1550","c-1049","e-1549","c-1051","e-1548",
           "c-1048","e-1547","c-1047","e-1546","c-1045",
           "e-1545","e-1544","c-1046","e-1543","e-1542",
           "c-1026","e-1541","e-1540","e-1539","e-1538",
           "c-1025","e-1537","e-1536","c-1024","f-1535",
           "f-1534"]

我只想迭代那些以“e-”开头的条目,例如“e-1553,e-1552" 等在我的 ForEach 控制器中并排除其他条目,例如 "c-1052, c-1050"

这样我就可以使用http://somesite.com/e-1553等等

我该怎么做?

鉴于您有 "entries" 变量保存 JSONArray,您可以获得从 "e-" 开始的所有条目,如下所示:

  1. 在 JSONPath 提取器
  2. 之后添加Beanshell PostProcessor
  3. 将以下代码放入后处理器的 "Script" 区域:

    JSONArray array = JSONArray.fromObject(vars.get("entries"));
    int counter = 0;
    for (int i=0;i < array.size();i++) {
        String s = array.get(i).toString();
        if (s.startsWith("e-"))
        {
            counter++;
            vars.put("entry_" + counter, s);
        }
    }
    

它将产生如下变量:

entry_1=e-1553
entry_10=e-1544
entry_11=e-1543
entry_12=e-1542
entry_13=e-1541
etc.

然后添加ForEach Controller,配置如下:

  • 输入变量前缀:entry
  • 循环的起始索引:0
  • 输出变量名:current_entry

然后在 HTTP 请求的 Path 中使用 ${current_entry}

有关 JMeter 中 Beanshell 脚本的更多信息,请参阅 How to use BeanShell: JMeter's favorite built-in component 指南。