读取线程组中相同响应消息的计数

时间:2017-09-27 13:09:47

标签: jmeter

我有单个采样器的线程组。我有一个10个用户运行1小时的场景。在视图结果树中显示每个采样器的响应数据中的不同响应数据。可以计算采样器获得相同响应数据的次数。

         {"success":false,"code":"104","message":"xx","status":412,"MessageType":"120","ResponseCode":"100","rilreplyDetails":"121"}

{"成功":假,"代码":" 104""消息":" YYY" "状态":412,"消息类型":" 120"" ResponseCode":" 100"&# 34; rilreplyDetails":" 121"}

我可以计算出有多少采样器得到" xx"响应,以及" yyy"有多少?

2 个答案:

答案 0 :(得分:0)

一种解决方案是在“测试计划”部分中定义两个变量,即: counter_xx counter_yyy

enter image description here

然后在采样器请求中添加一个正则表达式提取器以提取消息值,最后使用If Controller指定要递增的计数器。

下图显示了上述解决方案的结构。

enter image description here

最后,您可以使用$ {counter_xx}或$ {counter_yyy}来访问变量值。

答案 1 :(得分:0)

最简单的方法是在JMeter之外执行此操作,即将其配置为通过将以下两行添加到 user.properties 文件来保存响应数据:

jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_data=true

需要JMeter重启才能选择属性。完成测试后,使用您喜欢的XML编辑器检查生成的.jtl结果文件。

有关该方法的更多信息,请参阅Configuring JMeter

另一种选择是使用JSR223 Listener和脚本,如:

import org.apache.jmeter.engine.util.CompoundVariable
import org.apache.jmeter.functions.IterationCounter

def xxcounter = props.get("xxcounter")
if (xxcounter == null) {
    xxcounter = new IterationCounter();
    List<CompoundVariable> params = new ArrayList<>();
    params.add(new CompoundVariable("false"));
    xxcounter.setParameters(params);
}
def yycounter = props.get('yycounter')
if (yycounter == null) {
    yycounter = new IterationCounter();
    List<CompoundVariable> params = new ArrayList<>();
    params.add(new CompoundVariable("false"));
    yycounter.setParameters(params);
}

if (prev.getResponseDataAsString().contains('xx')) {
    log.info('XX count: ' + xxcounter.execute(prev, sampler))
    props.put('xxcounter', xxcounter)
}
if (prev.getResponseDataAsString().contains('yyy')) {
    log.info('YYY count: ' + yycounter.execute(prev, sampler))
    props.put('yycounter', yycounter)
}

侦听器将扫描当前采样器响应数据并将此计数器或该计数器增加到 jmeter.log 文件的当前值。

演示:

JMeter Increment Counter Conditionally

有关JMeter中Groovy脚本的更多信息:Apache Groovy - Why and How You Should Use It