【问题标题】:load additional http parameters from a file in jmeter从 jmeter 中的文件加载额外的 http 参数
【发布时间】:2013-12-16 10:01:49
【问题描述】:

是否可以从 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 是一种类似“哈希映射”的数据结构,具有唯一键,因此不能同时提供许多 fq 参数。

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

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

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

  2. 把上面的代码改成:

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

    如果(行!= 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);
     }
    

    }

【问题讨论】:

    标签: solr jmeter


    【解决方案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 脚本引擎不是)。

    【讨论】:

    • 好的,但是我该怎么处理 fq_{i} 参数呢?如何在 HttpRequest 中迭代它们?目标是在http请求中有几个fq参数,如问题中所述。
    • 如果您的请求是 GET,只需将它们放入“路径”,如果您发送的是 POST,只需将它们放入“请求正文”
    • 我可以以编程方式执行此操作吗?
    • 当然。我会使用 Beanshell 预处理器(将其添加为 HTTP 请求的子级)来生成相应的变量,如 REQUEST_PARAMS。您可以在 HTTP 请求路径或正文中将其称为 ${REQUEST_PARAMS}。
    【解决方案2】:

    您可以使用 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

    【讨论】:

    • 感谢您的尝试,但问题是存在任意数量的 fq 参数值,即这并不严格符合 CSV 格式。
    • 此外,另一个问题是在哪里映射 csv 列。如问题所述,它们都必须是具有完全相同名称的 HTTP 参数的值:fq。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2019-02-28
    • 1970-01-01
    • 2012-11-16
    • 2021-03-29
    相关资源
    最近更新 更多