如何发布从后处理器中检索的确切数量的值?

时间:2015-11-19 13:12:11

标签: jmeter

我登陆了一些客户列出的页面。我正在通过正则表达式提取器后处理器重新获得所有客户ID。

现在,在随后的请求中,我需要传递那些ID。它被作为“身体数据”传递。通过以下格式:

[19327,15947,14421,18813,20942]

假设有5个客户ID被重新启动,那么我可以使用每个记录的变量,如下所示:

传递变量:[${CustomerId_1},${CustomerId_2},${CustomerId_3},${CustomerId_5}] 发布变量值:[19327,15947,14421,18813,20942]

但是,比方说,只有3个客户ID被重新启动,如果我按上述方式传递变量,那么采样器将会失败,因为目前它只是重新获得3个客户ID记录。

传递变量:[${CustomerId_1},${CustomerId_2},${CustomerId_3},${CustomerId_5}] 发布变量值:[19327,15947,14421,${CustomerId_4},${CustomerId_5}]

如何处理这个问题,PLZ。帮忙。

提前致谢

2 个答案:

答案 0 :(得分:1)

  1. 添加Beanshell PreProcessor作为第二次请求的子项
  2. 将以下代码放入预处理器的“脚本”区域

    int customers = Integer.parseInt(vars.get("CustomerId_matchNr"));
    StringBuilder requestBuilder = new StringBuilder();
    requestBuilder.append("[");
    for (int i = 1; i <= customers; i++) {
        requestBuilder.append(vars.get("CustomerId_" + i));
        if (i != customers) {
            requestBuilder.append(",");
        }
    }
    requestBuilder.append("]");
    
    sampler.getArguments().getArgument(0).setValue(requestBuilder.toString());
    
  3. 以上代码将根据匹配数量构建所需的请求行并自动设置请求体。

    参考类:

    有关Beanshell脚本的详细信息,预定义变量的说明以及一些有用的示例,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南。

答案 1 :(得分:0)

refName_matchNr将返回匹配数。因此,在您的情况下,CustomerId_matchNr将为您提供许多customerID。

使用beanshell预处理器运行循环并构造BodyData字符串并将其保存到新变量,在后续采样器中使用该变量。