Misty rain
Jmeter性能测试-进阶篇(下)
进阶篇下:本章为进阶篇的下篇,主要讲如何进行基础的接口性能测试,本篇中三个需求分为三篇,本篇主要讲需求1
回顾一下上俩篇:我们主要讲了如何使用jmeter编写接口和对接口进行各种处理,建议熟练使用并融合到你要测试的业务中。
另外:本篇进阶篇完成后,将开启jmeter性能测试-最终篇,让我们来探索jmeter的最终奥秘,敬请期待!
目前的项目目录结构:
制定测试需求
1、用户数:50,启动时间:10s,循环次数:3次;
在这个条件中我们需要知道:
‘新增学生’、‘获取学生列表’、‘获取指定学生信息’接口分别的:响应时间、异常率、吞吐量、平均响应时间
2、设置线程数:100,启动时间5s,循环次数1,在‘新增学生’接口采取并发策略,并发数:50;
我们需要知道在50次的并发中的接口指标:响应时间、异常率、吞吐量、平均响应时间
3、用户数:50,启动时间1min,循环次数:无限;启用调度器:持续时间3min。
在这个条件中我们需要知道:
‘新增学生’、‘获取学生列表’、‘获取指定学生信息’接口分别的:响应时间、异常率、吞吐量、平均响应时间
可以看到,我们在jmeter中经常看的性能指标无外乎以上4中,当然也包括各种趋势图。
注意:性能测试争取采用非GUI的命令去运行并把结果进行保存。
实现需求1
根据以上需求针对接口进行调整,我们将去除‘循环控制器’和数据库查询等操作,因为本需求并不需要:
1、直接将‘新增学生’接口先拿出来然后禁用掉‘循环控制器’
2、禁用掉‘连接数据库’
3、禁用掉‘CSV-phone’
4、打开‘电话号计时器’
5、修改‘新增学生’接口参数:
{
"name":"学生${__Random(1000,9999,)}",
"grade":"三班",
"phone":"${phone}"
}
这里为什么要给name加随机数呢,因为我们‘获取指定学生信息’时只获取一条数据,如果不加随机数每次一样的学生名称数据会越积越多。
以上基本完成了接口的调整。
接下来我们需要将运行的结果进行保存:
1、打开‘结果观察树’,选择一个csv文件
以上我们便已经保存好了结果。
接下来进入调试,先把线程数设置成3,循环一次看看。
调试通过后,结果会输出在指定的文件夹中。点开csv文件可以查看运行的结果。
调整为“需求1”的参数
这时,我们可以关闭jmeter的GUI界面了。
打开cmd命令:
1、cd 到jmeter的bin目录
2、输入命令
jmeter -n -t D:\**\jmeter\apache-jmeter-5.1.1\script\student.jmx
-n:使用命令行模式运行
-t:指定要运行的jmx脚本
等待执行完毕后,打开保存结果的csv文件查看运行结果;
打开jmter在聚合报告中打开jtl查看结果:
Samples:总http请求的次数。比如线程数5,循环次数2,总请求就是5*2=10。
Average:单个request的平均响应时间。当响应时间曲线平缓,无波动,使用平均时间更准确。当响应时间曲线波动大,忽高忽低,建议使用90%Line时间更为准确。
90%Line:百分之90的响应时间,请求中百分之90的响应时间低于这个数,就叫90%Line。
99%Line:百分之99的响应时间,请求中百分之99的响应时间低于这个数,就叫99%Line。
Median:中位数时间相当于50%Line。
Min:总请求中的最小响应时间。
Max:总请求中的最大响应时间。
Error%:总请求的中的错误率。错误率=失败请求/总请求
Throughput:请求时间中的总吐吞量
Received KB/sec:每秒处理的服务器的请求数。相当于loadrunner的LoadRunner的Transaction per Second数
sent KB/sec:每秒发送到服务器的请求数
通过以上的参数我们就已经得到最终的指标。
555
555
555
555
555
555
555
555
555
555
1
1
1
1
1
1
1
1
1
1
1
1
response.write(9127898*9514124)
'+response.write(9127898*9514124)+'
"+response.write(9127898*9514124)+"
1
1
1
-1); waitfor delay '0:0:15' --
ffxgLbiV') OR 284=(SELECT 284 FROM PG_SLEEP(15))--
1
1
if(now()=sysdate(),sleep(15),0)
-1)) OR 809=(SELECT 809 FROM PG_SLEEP(15))--
1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
1'"
1'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555
555
1
1
1
1
1
555
1
1
1
1
1
1
555
1
1
1
555
555
1
1
1
1
1
1
555