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

时间:2014-03-26 09:31:39

标签: jmeter jmeter-plugins

我想使用Apache Jmeter 2.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

我想计算每个段对所有响应所采用的总平均时间,即segment_1所用的平均时间,segment_2所用的平均时间,segment_3所用的平均时间,segment_4所用的平均时间,segment_5所用的平均时间以及segment_6所用的平均时间。

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

2 个答案:

答案 0 :(得分:0)

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

首先,您需要使用正则表达式提取器以及正则表达式提取您的细分值,例如 segment_1_time" :(。*?),等等。

接着, 使用 beanshell post processor 来计算每个段时间的总值

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*/  

在上面的代码中,保存响应中的每个段值并添加前一个值。

最后你可以用线程数除以得到平均值
希望这可以帮助您并参考此链接以获取有关 bean shell scripting

的更多信息

答案 1 :(得分:0)

如果您愿意尝试其他测试工具,可能需要查看NetGend。这是一个blog,它显示了如何在NetGend平台上实现这种情况 - 如此简单,以至于您不需要很多编程背景来理解它。

祝你好运。