一、性能测试的概念
压力测试:超出系统能承受的压力下(响应开始出错),找出系统性能的瓶颈
负载测试:梯度增加压力,测试系统不出现问题的最大压力
稳定性测试:在一定的压力条件下(比给定的压力大),长时间运行(7*24h),系统不出现问题
性能测试:在给定(并发数)条件下,测试系统的吞吐量、响应时间等
一些误区: 用户数?=在线数?=并发数 用户数、在线数、并发数 = 100:10:1
二、性能测试关注的指标
并发数、平均响应时间、吞吐量
三、Jmeter工具介绍(一)
1、制作脚本
1)录制; 2)手动编写
2、回放
3、添加监听器
1)查看结果树 ;2)汇总报告
4、参数化
1)CSV Data Set Config;
2)Config Element —> User Defined Variables ;
3)Test Plan —> User Defined Variables ;
4)正则表达式提取器
5、设置断言
6、设置并发
7、关闭查看结果数等大量消耗资源的监听器
8、其他(等待时间、循环控制器、监听器等)
四、Jmeter工具高级用法
1、梯度加压
2、分布式压测
3、Beashell Samper
4、引用外部Java包
5、Debug Sampler
6、扩展插件
7、只保存出错请求的详细信息
五、性能测试实例介绍
1、UAC-usercenter登录接口:
1)测试2000并发(2-5-8);
2)添加APM监控工具对服务器性能影响 ;
3)性能要求:3000吞吐量(3000并发,平均响应时间为1秒)
2、性能优化过程
1)将从数据库读取数据换成从Redis读取数据;
2)逐行代码分析并优化(减少重复判断、去掉@Transactional注解);
3)将容器数从2个增加为4个,再增加为6个;
4)将Redis连接数从8个,改为16个,32个,16个
3、性能分析神器APM介绍
1)CPU 2)内存 3)IO 4)网络 5)线程
6)统计性能测试过程中每一个接口的响应时间,并绘制成图表;
7)对每一个接口的响应时间做更细致的拆分(精确到每一个方法的耗时)
六、性能测试经验总结(一)
1)对性能要求高的项目,每修改一个方法、一行代码,都要评估对性能的影响,并重新测试一遍性能数据。
2)单个用户时的响应时间与大量用户并发时的耗时很多时候并不完全一致。
3)在代码没有明显缺陷的情况下,性能优化首先考虑数据库,其次是缓存,最后才是代码内部逻辑的优化。
七、性能测试待解决的问题
1、使用Maven命令导出的jar包在其他程序中无法引用。
2、在并发测试中,添加随机等待时间后,平均响应时间有大幅的下降,不知道是为什么。
3、在按流程的场景并发中,有什么好的方法设置不同的业务有不同的并发数和不同的访问量。