0

我有一个 JMeter 脚本,它通过一堆请求,每个请求都不同,GETs,POSTs 等等......

每个请求都从服务器返回一个自定义标头,其中包含一些数值。此标头返回它在服务器端花费的实际处理时间(没有延迟/http 开销)

我能够添加一个正则表达式提取器以毫无问题地从标头中获取该值,但是我希望对所有请求都重复此操作。

通过使用调试采样器,我可以看到提取器只运行一次,似乎是最后一个实例。

我怎样才能拥有一个运行所有请求并从标头收集所有值的提取器。

奖金问题。最后,我希望能够汇总这些值并获得一个平均值。

免责声明:另一个问题与我的类似,但它没有解释如何根据提取器和调试采样器的位置实际执行此操作。

在 JMeter 中跟踪正则表达式提取器的结果

谢谢你。

4

2 回答 2

1

只需将正则表达式提取器与您的 HTTP 请求采样器放在同一级别,它将应用于所有这些采样器

JMeter 正则表达式提取器

有关更详细的说明,请参阅范围规则用户手册条目。

关于值收集,最好的选择是使用Sample Variables属性。假设您将标头值存储到一个名为的变量中,${foo}您可以通过将下一行添加到user.properties文件来将其附加到 jtl 结果文件中:

sample_variables=foo

需要重新启动 JMeter 才能获取该属性。另一种方式(不需要重新启动)是通过-J命令行参数传递属性为

jmeter -Jsample_variables=foo -n -t test.jmx -l result.jtl

结果,您将获得一个foo在 .jtl 结果文件中调用的额外列,它将保存${foo}每个采样器的变量值。测试完成后,您将能够使用 MS Excel 或等效软件打开 .jtl 结果文件,并使用AVERAGE函数来获取您正在寻找的值。

有关根据您的需要设置和修改各种 JMeter 属性以配置 JMeter的更多信息,请参阅Apache JMeter 属性自定义指南。

于 2017-03-15T12:21:49.770 回答
0

虽然德米特里的回答是这样做的一种方式。但我想要的东西不同于每次将其导出到文件中并对其进行后处理......

我最终“手动”做了这个

通过手动,我的意思是我添加了一个带有 language = JavaScript 的 BSF 断言,然后编写了一些 JavaScript 来执行此操作:

  1. 从标题中提取值(如果找到)
  2. 使用变量记录总数/计数
  3. 更新始终显示聚合的变量
  4. 添加 Debug Sampler 以便在测试后轻松访问值。

以下是我在 BSF 断言中使用的代码:

var responseHeaders = prev.getResponseHeaders();

var xNodetasticRt = /x-nodetastic-rt: (\d+\.?\d*)/.exec(responseHeaders);

if (xNodetasticRt) {
    var value = parseFloat(xNodetasticRt[1]);

    vars.put("xNodetasticRt", value); 

    var total = parseFloat(vars.get("xNodetasticRt-Total")); 
    if (!total) {
        total = 0.0;
    }
    total += value;
    vars.put("xNodetasticRt-Total", total);

    var count = parseFloat(vars.get("xNodetasticRt-Count")); 
    if (!count) {
        count = 0;
    }
    count++;
    vars.put("xNodetasticRt-Count", count);

    vars.put("xNodetasticRt-Average", total / count);
}
于 2017-03-15T18:40:35.660 回答