从响应中提取数据并使用jmeter计算平均值

从响应中提取数据并使用jmeter计算平均值,jmeter,jmeter-plugins,Jmeter,Jmeter Plugins,我想使用ApacheJMeter2.11检查API的性能。HTTP请求的响应数据如下: { "global_id": 11111, "name": "IMG_001.JPG", "width": "1111", "height": "1111", "time_taken": { "segment_1_time": 1, "segment_2_time": 1, "segment_3_time": 27, "segment_4_time": 1, "segment_5_time

我想使用ApacheJMeter2.11检查API的性能。HTTP请求的响应数据如下:

{
"global_id": 11111,
"name": "IMG_001.JPG",
"width": "1111",
"height": "1111",
"time_taken": {
  "segment_1_time": 1,
  "segment_2_time": 1,
  "segment_3_time": 27,
  "segment_4_time": 1,
  "segment_5_time": 56,
  "segment_6_time": 8,
  "total_time": 94
 }
}
线程属性: 线程数:1, 爬升周期(以秒为单位):1, 循环计数:50

我想计算所有响应的每个分段的总平均时间,即分段_1的平均时间、分段_2的平均时间、分段_3的平均时间、分段_4的平均时间、分段_5的平均时间和分段_6的平均时间


计算平均段时间所需的后处理器和javascript是什么?

我认为您需要将正则表达式提取器与beanshell后处理器一起使用

首先,您需要使用正则表达式提取器和适当的正则表达式来提取段值,如段1时间“:(.*),

其次,, 使用beanshell后处理器计算每段时间的总值

var CurrentSegmentValue=vars.get("SEGMENT1");//Current segment value from Regular expression extractor

log.info("CurrentSegmentValue = "+CurrentSegmentValue);

/* You need to use this logic to calculate other segment values like SEGMENT2,3,4,5,6 etc
 *  but remember this method makes performace bottle neck when you have tested with higher number of threads
 *  and result may be differ see any appropriate web links for Jmeter performance tuning and suggested to use 64 bit JVM
 */

var totalvalueString=vars.get("totalValue");

if(totalvalueString==null)
{
vars.put("totalValue","0");
}

int totalValue= java.lang.Integer.parseInt(CurrentSegmentValue)+java.lang.Integer.parseInt(totalvalueString);

vars.put("totalValue",""+totalValue);

log.info("Final Total Value:"+totalValue);

//Going to next loop
/*Divide total value with number of threads you will get your mean time*/  
在上面的代码中,响应中的每个段值都被保存并与以前的值一起添加

最后,您可以将其除以线程数以获得平均值

希望这可以帮助您,并参考此链接了解有关

的更多信息。如果您愿意尝试其他测试工具,您可能需要查看。下面是一个演示如何在NetGend平台上实现此场景的示例-非常简单,您不需要很多编程背景就可以理解它


祝您好运。

您是指每个循环的平均响应时间吗?线程数:1,循环计数:50。这意味着总共将向服务器发送50个请求。我想计算50个响应中每个段所花费的平均时间。例如,第一个响应有“段1时间”:1,第二个响应有“段1时间”:3,第三个响应有段_1_time”:5,依此类推。段_1的平均时间为(1+3+5)/3=3。我想用这种方法计算每个段(1,2,…,6)的响应时间。谢谢你的回复@Nithin。在上面的代码中:
int totalValue=java.lang.Integer.parseInt(tt)+java.lang.Integer.parseInt(tt1);
tt和“tt1”是什么意思“引用?我使用正则表达式提取器和以下字段:引用名称:s1time,正则表达式:“segment_1_time”:(\d+),模板:$1$,匹配号:1,默认值:0,然后我在bean shell后处理器
var time_s1=vars.get(“s1time”)中编写了这个脚本;字符串s1time=vars.get(“s1time”);log.info(“分段1每次响应所花费的时间(来自var)=”+时间_s1);log.info(“段1每次响应所花费的时间(来自字符串)=”+s1time)但这两个都返回null。我现在无法指出任何问题,请检查以下几点,它们可能会帮助您解决问题1。检查带有通配符的正则表达式。*并在控制台中记录该值。2.检查并尝试将测试计划设计为Http采样器------>RegularExpressionExtractor------>BeanShell后处理器3。您还可以使用JSON路径提取器(‎) 从Jmeter插件插件(Free)到解析json响应(),使用debug sampler查看regex提取器正在提取什么以及设置了什么变量。