一、背景介绍
一直困惑网上的关于JMeter控制业务比例的思想,链接为https://www.jianshu.com/p/db092cbcceb1,今天琢磨到凌晨两点,终于解惑。
假设要测试一个电商网站的性能, 在实际的场景中,有四个业务分别是查看积分明细、查看首页广告、浏览商品详情、浏览商品评价,业务使用比例为1:3:5:6,如何使用JMeter来模拟实现?
二、实现过程
当然新建四个线程组,分别对应四个业务,按照既定比例设定线程数的方式不可行,因为业务的响应时间不可能一致。
我们用另外一种方式来实现。
既定的比例加起来和为15,我们可以把JMeter的运行次数与15取余,前15次取余值的范围落在下面四个范围(这里要用到JMeter的元件IF控制器):
{1} {2 3 4} {5 6 7 8 9} {10 11 12 13 14 15} 16 17 18 19 ......
假设四个业务分别对应的业务代码是D、C、B、A,则对应业务的控制逻辑如下,
A ${__counter(true,)}%15<1
B ${__counter(true,)}%15<=4 && ${__counter(true,)}%15>1
C ${__counter(true,)}%15>4 && ${__counter(true,)}%15<=9
D ${__counter(true,)}%15>9 && ${__counter(true,)}%15<==0
大于15的运行次数也可以以这种方式类推,进行比例划分。
1 查看积分明细的业务比例在JMeter中设置为${__counter(true,)}%15<1,如下图,
2 查看首页广告的业务比例设置为${__counter(true,)}%15<=4 && ${__counter(true,)}%15>1,如下图,
3 浏览商品详情的业务比例设置为${__counter(true,)}%15>4 && ${__counter(true,)}%15<=9,如下图,
4 浏览商品评价的业务比例设置为${__counter(true,)}%15>9 && ${__counter(true,)}%15<==0,如下图,
5 设定这四个业务循环跑的次数为150,跑完查看Aggregation报告显示的业务比例符合1:3:5:6,如下图,
其他的业务比例请按照这个思路举一反三。