我有单个采样器的线程组。我有一个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"有多少?
答案 0 :(得分:0)
一种解决方案是在“测试计划”部分中定义两个变量,即: counter_xx 和 counter_yyy 。
然后在采样器请求中添加一个正则表达式提取器以提取消息值,最后使用If Controller指定要递增的计数器。
下图显示了上述解决方案的结构。
最后,您可以使用$ {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中Groovy脚本的更多信息:Apache Groovy - Why and How You Should Use It