jmeter(111)——如何测试单接口或某个事务的tps?

        通常情况下,如果测试单接口时,会通过增加线程数量*循环次数会分多次测试,通过查看聚合报告的响应时间和Throughput测试出拐点。我一直在想有没有什么办法可以一次执行,通过不断加压增加线程组(这个可以使用stepping Thread Group解决)数量来查看不同压力下的tps,问题就在于聚合报告中数据没有区分不同线程数量的数据,混在一起无法判断。

        那是不是只要将不同线程数量执行时的数据分开显示就可以一次完成多次执行的事情?今天看论坛时无意中得到启动,可以通过stepping Thread Group进行不同线程数量的加压,具体参数说明上一节已讲过,现设置如下,总共启动20个线程,分5次加压,每次增加4个线程,每次持续30秒。

jmeter(111)——如何测试单接口或某个事务的tps?_第1张图片

 测试登录单接口,将这个取样器的Name改为${VuNum},这个变量是指当前活动的线程数量

jmeter(111)——如何测试单接口或某个事务的tps?_第2张图片

在其下增加一个前置处理器,在执行login取样器之前,先获取当前活动的线程数量,获取后取样器名称就可以引用到这个变量,并且在后续的监听器聚合报告中会根据线程数量分开展示数据。

前置处理器内容如下:利用getNumberOfThreads()获取当前线程数,根据stepping Thread Group图中设置的4-8-12-16-20,将变量times设置为4,这样通过num判断当前线程数量,给VuNum赋予不同值

import org.apache.jmeter.threads.JMeterContextService;
int num=org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads();
log.info("当前线程数:"+num);
int g1=1*${times};
int g2=2*${times};
int g3=3*${times};
int g4=4*${times};
int g5=5*${times};
String s1="并发<="+g1;
String s2=g1+"<并发<="+g2;
String s3=g2+"<并发<="+g3;
String s4=g3+"<并发<="+g4;
String s5=g4+"<并发<="+g5;

if(num<=g1)
{
	vars.put("VuNum",s1);
	}
else if (num>g1&&num<=g2)
{
	vars.put("VuNum",s2);
	}
else if (num>g2&&num<=g3)
{
	vars.put("VuNum",s3);
	}
else if (num>g3&&num<=g4)
{
	vars.put("VuNum",s4);
	}
else if (num>g4&&num<=g5)
{
	vars.put("VuNum",s5);
	}

 再增加聚合报告Aggregate Report、jp@gc - Response Times vs Threads、jp@gc - Transaction Throughput vs Threads

执行结果查看:

 从上图的聚合报告中看出不同并发数下对应的吞吐量和响应时间,其中在前4个阶梯时随着并发量增加响应时间增加,tps也随着增加,但是到了并发20时,响应时间增加,tps不再增加,说明已经到了吞吐量的拐点。根据tps=并发数/响应时间测算出拐点并发数=63.2*0.25=15.8即当并发数16时出现拐点

        同时通过查看下图,随着线程数增加一开始tps是线性增长,到16个时突然下降

jmeter(111)——如何测试单接口或某个事务的tps?_第3张图片

 同时响应时间在那个点突然突刺增长

jmeter(111)——如何测试单接口或某个事务的tps?_第4张图片

你可能感兴趣的:(Jmeter,java,开发语言)