jmeter报告里的内存怎么转为百分比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter报告里的内存怎么转为百分比相关的知识,希望对你有一定的参考价值。

参考技术A

1.多线程方式,比如a采样器用20个线程,b线程用60个线程,这样比例即为1:3

       但是这样会产生一个问题,若按照时间维度执行,均执行10min,a采样器与b采样器的response时间不一样,那么在这段时间内a与b的请求数无法做到1:3

 

    2.jmeter自带一个计算函数,使用该函数则可达到效果。

      

   简述一下该控制器的功能,这个控制器为每个请求计数,相当于给了他一个编号。

   当参数为true时,每个用户有自己的计数器,比如10个线程组,100个loop,这是计数器的值为1-100.

   当选择false,全局计算器,10个线程组,100个loop,计数器值为1-10000

   那么想使用1:3的比例时,则使用一个if控制器。

   条件分别为 $__counter(true,)%4==0 与$__counter(true,)%4!=0

    详见http://blog.csdn.net/selingchen/article/details/47844375

   

  3.使用JSR223 Sampler + Groovy

   在控制器中加入下面代码

12345678910111213141516171819

   

int[] values = (int[])vars.getObject("RANDOM_VALUES");if(values==null)     values =  [0,1,2,3,2,3,1,3,2,3] as int[];    vars.putObject("RANDOM_VALUES",values);// Increment that will be used in SwitchController value will be between 0 and 2// because there are 3 TCsInteger increment = (Integer)vars.getObject("INCREMENT");if(increment==null)     increment = Integer.valueOf(0); else     increment = Integer.valueOf((increment.intValue()+1)%values.length);   String value = Integer.toString(values[increment.intValue()]); vars.put("SWITCH_VALUE", value);vars.putObject("INCREMENT", increment);SampleResult.setResponseData("SWITCH_VALUE from inside:"+value, null);return "SWITCH_VALUE:"+value;

   

  相当于每次都在给RANDOM_VALUES数组遍历,依次取里面的值,然后用if控制器判断,达到实现百分比的效果。

  详见:http://www.oschina.net/translate/jmeter-control-percentage-of-sampler?cmp

 

 

  针对上面三种方式进行比较:

  方案一不用说,有时候达不到百分比分发请求的效果,为下策。

  方案三经过试验,有一个很大的缺点,采用的是采样器,消耗就较大。尤其是遇到更加复杂的场景,比如有a,b两个场景,需要用一个JSR223采样器,a场景下面又有一个复合场景,需要按照比例分发请求(这种情况蛮常见的),这时又需要加一个采样器。这样的话,就显得太麻烦,如果用本地的jmeter,不用分布式,可能都会因为开销太大导致压力上不去。

  方案二:采用jmeter本身自带的计算器,倒不失为一个好的方法。但是针对一些复杂的场景,这个计算式有点难写,

  比如:3:2这个比例,我看到网上的实现都是$__counter(true,)%2==1||$__counter(true,)%3==0,

  这种计算方式就比较复杂了,那有没有简单一点实现方式呢?

  其实是有的。

 

 比如下面场景:

  

 

那么表达式应该怎么写呢?

 上面有3的倍数,5的倍数,那么取其最小公倍数15,按照15分割。

均使用If控制器,表达式分别为:

a:  $__counter(false,)%15 <=5

b:  $__counter(false,)%15 >5

c:   $__counter(false,)%15==1

d:   $__counter(false,)%15>1&& $__counter(false,)%15<=5

总结规律:

按照最小的公倍数分割,每个控制器取他们应占的份数。

上面的3:2的实现手段,就更容易了,一个占2/5,一个占3/5,完全不需要写那么复杂的数学表达式~~~

以上是关于jmeter报告里的内存怎么转为百分比的主要内容,如果未能解决你的问题,请参考以下文章

jmeter聚合报告的参数分析

JMETER 生成测试报告

Jmeter中的百分位数功能

错误不是查看结果树,而是显示在 Jmeter 的摘要报告中

怎么打出jq里的百分比号不报错

Jmeter测试得到的聚合报告测试结果的数据分别对应啥单位