JMeter 为所有请求重复正则表达式提取器
JMeter repeat Regular Expression extractor for all requests
我有一个 JMeter 脚本,它处理一堆请求,每个请求都是不同的,GET、POST 等等...
每个请求 returns 来自服务器的自定义 header,其中包含一些数值。这 header returns 服务器端的实际处理时间(没有 latency/http 开销)
我能够添加一个正则表达式提取器来从 header 中获取该值而没有任何问题,但是我希望对所有请求重复此操作。
通过使用 Debug Sampler,我可以看到提取器只运行一次,似乎是最后一个实例。
我怎样才能拥有一个运行所有请求并从 header.
收集所有值的提取器
奖金问题。最后,我希望能够汇总这些值并得到一个平均值。
免责声明:这个问题与我的类似,但它没有解释如何根据提取器和调试采样器的位置进行实际操作。
Track results of a regular expression extractor in JMeter
谢谢。
只需将正则表达式提取器放在与 HTTP 请求采样器相同的级别,它就会应用于所有采样器
请参阅 Scoping Rules 用户手册条目以获取更详细的说明。
关于值 collection 最好的选择是使用 Sample Variables 属性。如果您将 header 值存储到一个名为 ${foo}
的变量中,您可以通过将下一行添加到 user.properties 来将其附加到 jtl 结果文件中文件:
sample_variables=foo
需要重新启动 JMeter 才能选择 属性。另一种方式(不需要重启)是通过 -J
command-line 参数将 属性 作为
传递
jmeter -Jsample_variables=foo -n -t test.jmx -l result.jtl
作为结果,您将在 .jtl 结果文件中获得一个名为 foo
的额外列,它将保存每个采样器的 ${foo}
变量值。测试完成后,您将能够使用 MS Excel 或等效文件打开 .jtl 结果文件,并使用 AVERAGE 函数获取您要查找的值。
根据需要看Apache JMeter Properties Customization Guide for more information on setting and amending various JMeter properties for Configuring JMeter。
虽然 Dmitri 的回答是一种方法。但我想要的东西不同于每次将其导出到文件并 post 处理它...
我最后做了这个"manually"
手动我的意思是我添加了一个语言为 JavaScript 的 BSF 断言,然后写了一些 JavaScript 来做到这一点:
- 从 header 中提取值(如果找到)
- 使用变量
记录total/count
- 更新始终显示聚合的变量
- 添加调试采样器以便在测试后轻松访问值。
以下是我在 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);
}
我有一个 JMeter 脚本,它处理一堆请求,每个请求都是不同的,GET、POST 等等...
每个请求 returns 来自服务器的自定义 header,其中包含一些数值。这 header returns 服务器端的实际处理时间(没有 latency/http 开销)
我能够添加一个正则表达式提取器来从 header 中获取该值而没有任何问题,但是我希望对所有请求重复此操作。
通过使用 Debug Sampler,我可以看到提取器只运行一次,似乎是最后一个实例。
我怎样才能拥有一个运行所有请求并从 header.
收集所有值的提取器奖金问题。最后,我希望能够汇总这些值并得到一个平均值。
免责声明:这个问题与我的类似,但它没有解释如何根据提取器和调试采样器的位置进行实际操作。
Track results of a regular expression extractor in JMeter
谢谢。
只需将正则表达式提取器放在与 HTTP 请求采样器相同的级别,它就会应用于所有采样器
请参阅 Scoping Rules 用户手册条目以获取更详细的说明。
关于值 collection 最好的选择是使用 Sample Variables 属性。如果您将 header 值存储到一个名为 ${foo}
的变量中,您可以通过将下一行添加到 user.properties 来将其附加到 jtl 结果文件中文件:
sample_variables=foo
需要重新启动 JMeter 才能选择 属性。另一种方式(不需要重启)是通过 -J
command-line 参数将 属性 作为
jmeter -Jsample_variables=foo -n -t test.jmx -l result.jtl
作为结果,您将在 .jtl 结果文件中获得一个名为 foo
的额外列,它将保存每个采样器的 ${foo}
变量值。测试完成后,您将能够使用 MS Excel 或等效文件打开 .jtl 结果文件,并使用 AVERAGE 函数获取您要查找的值。
根据需要看Apache JMeter Properties Customization Guide for more information on setting and amending various JMeter properties for Configuring JMeter。
虽然 Dmitri 的回答是一种方法。但我想要的东西不同于每次将其导出到文件并 post 处理它...
我最后做了这个"manually"
手动我的意思是我添加了一个语言为 JavaScript 的 BSF 断言,然后写了一些 JavaScript 来做到这一点:
- 从 header 中提取值(如果找到)
- 使用变量 记录total/count
- 更新始终显示聚合的变量
- 添加调试采样器以便在测试后轻松访问值。
以下是我在 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);
}