从jmeter中的文件加载其他http参数

时间:2013-12-16 10:01:49

标签: solr jmeter

是否可以从jmeter中的文件加载一些额外的http请求参数? 我的用例是我发送给SOLR的过滤器查询参数都具有完全相同的名称,但值不同:

FQ =字段1:值1&安培; FQ =字段2:值2&安培; FQ =字段3:值3

到目前为止,bean shell脚本是:

String line = vars.get("facets");

if(line != null) {
     StringTokenizer st = new StringTokenizer(line, ",");

     while (st.hasMoreTokens()) {
        String filterQ = st.nextToken();

        String varname = "fq";
        vars.put(varname,filterQ);
     }
}

由于vars是一个具有唯一键的“哈希映射”类数据结构,因此不能在同一个go中提供许多fq参数。

我在考虑使用带有这些fq参数的文件,但是有人知道如何将它们附加到HTTP Request元素中配置的现有http参数吗?

UPD。总结下面的答案,这就是我所做的:

  1. 将BeanShell PreProcessor添加为HttpRequest的子代

  2. 将上述代码更改为:

    String line = vars.get(“facets”);

    if(line!= null){      StringTokenizer st = new StringTokenizer(line,“,”);

     while (st.hasMoreTokens()) {
        String filterQ = st.nextToken();
    
        // add fq parameter and its value to the http request body
        String paramName = "fq";
        ctx.getCurrentSampler().addArgument(paramName, filterQ);
     }
    

    }

2 个答案:

答案 0 :(得分:1)

为什么不修改代码以区分变量名称,例如fq1fq2等。

像:

String line = vars.get("facets");

    if(line != null) {
        StringTokenizer st = new StringTokenizer(line, ",");
        int i = 0;
        while (st.hasMoreTokens()) {
            String filterQ = st.nextToken();

            String varname = "fq" + i;
            vars.put(varname,filterQ);
            i++;
        }
    }

顺便说一句,Beanshell不是非常推荐用于繁重的脚本编写,如果你在多个线程中生成这个代码,你应该use JSR223 Sampler and groovy language能够生成本机Java代码(Beanshell脚本引擎不是)。

答案 1 :(得分:1)

您可以使用JMeter CSV数据集元素。 这允许您通过在脚本中使用变量来加载和迭代值。

这是一个示例教程:
http://community.blazemeter.com/knowledgebase/articles/65138-using-csv-data-set-config

官方文件在这里:
http://jmeter.apache.org/usermanual/component_reference.html#CSV_Data_Set_Config