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

Solr 从jmeter中的文件加载其他http参数,solr,jmeter,Solr,Jmeter,是否可以从jmeter中的文件加载一些额外的http请求参数? 我的用例是,我发送给SOLR的过滤器查询参数都具有完全相同的名称,但值不同: fq=Field1:Value1&fq=Field2:Value2&fq=Field3:Value3 到目前为止,bean shell脚本是: String line = vars.get("facets"); if(line != null) { StringTokenizer st = new StringTokenizer(line, "

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

fq=Field1:Value1&fq=Field2:Value2&fq=Field3:Value3

到目前为止,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请求元素中配置的现有http参数吗

Upd。总结以下答案,以下是我所做的:

  • 作为HttpRequest的子级添加了BeanShell预处理器

  • 将上述代码更改为:

    String line=vars.get(“facets”)

    如果(行!=null){ StringTokenizer st=新的StringTokenizer(行,“,”)

    }


  • 为什么不修改代码来区分变量名,即
    fq1
    fq2
    ,等等

    比如:


    顺便说一句,Beanshell不太适合编写繁重的脚本,如果您要在多个线程中生成此代码,您应该选择能够生成本机Java代码的线程(Beanshell脚本引擎不是)

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

    下面是一个示例教程:

    官方文件在这里:

    好的,但是我该如何处理fq{I}参数呢?如何在HttpRequest中迭代它们?目标是在http请求中包含多个fq参数,如问题中所述。如果您的请求是GET,请根据需要将它们放入“路径”中;如果您要发送POSTcan,请将它们放入“请求正文”中。我可以通过编程方式执行此操作吗?当然可以。我将使用Beanshell预处理器(将其添加为HTTP请求的子级)生成相应的变量,如Request_PARAMS。您可以在HTTP请求路径或正文中将其称为${REQUEST_PARAMS}。感谢您的尝试,但问题是fq参数值的数量是任意的,也就是说,这并不严格符合CSV格式。此外,另一个问题是映射CSV列的位置。如问题中所述,它们都必须是具有完全相同名称的HTTP参数值:fq。
     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);
     }
    
    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++;
            }
        }