性能测试基础与性能测试流程
了解资源利用率、吞吐量、响应时间与并发用户数的关系
三者与并发用户数关系图如下。但在现实测试中,曲线不会是平滑的
性能测试的流程是什么样的
一.需求分析与测试设计 (性能需求目标 + 业务模型拆解)
- 1.根据具体的性能测试需求,确定测试类型以及压测的模块 (web/mysql/redis/系统整体)
- 2.前期要与相关人员充分沟通,初步确定压测方案及具体性能指标
- 3.QA 完成性能测试设计后,需产出测试方案文档发送邮件到项目组,并且再次与相关人员沟通(或者组织性能测试评审),确认是否满足需求
在没有以往的指标数据时,可以通过 UV 和 PV(可以让产品提供),计算并发用户数和 QPS
二.环境设计与搭建
略
三.测试数据准备 (基于模型的数据准备)
- 1.接口请求参数:自己构造/日志获取/上下关联;
- 2.数据表的数据填充;
- 3.如果是多接口,则需结合业务场景设计请求比例。
四.性能指标预期 (性能需求目标)
- 1.每秒请求数(QPS)
- 2.请求响应时间(最小、最大、平均)
- 3 并发用户数
- 4.错误率
- 5.机器性能:cpu idle 30%、memory 无剧烈抖动或者飙升
- 6.压测过程接口功能是否正常
当然,不同性能测试方式下指标预期会有差异
五.发压工具配置及脚本编写 (压力策略)
- 1.这里采用 JMeter
- (1) 集成包,解压即可使用,Windows、Linux 通用(依赖 java 环境)
- (2) jmx 脚本为 xml 文件,Win、Linux 环境均可直接运行
- (3) 多线程并发
- (4) 运行完脚本会生成 jtl 日志,可在 Win 环境界面工具中查看、统计
- 2.脚本的编写
- 3.命令: (1) 启压:./jmeter -n -t hb.jmx -l hb.jtl
测试工具选型:
压测场景:单接口/复杂事务 => JMeter 场景构造
压力需求:<1000 QPS or 万级以上 => JMeter 分布式支持
是否周期性:JMeter Jmx 场景文件,数据驱动,结果落库
二次开发需求:JMeter 开源插件化思想,支持 Thrift,Dubbo 等多种协议。可以快速平台化。
问题支持:JMeter 开放社区,广泛使用
六.测试过程 (预计的前置准备过程,和压测时间点规划)
- 1.测试前环境检查:记录机器参数
- 2.起压:根据被压情况,调节并发量到适合的情况
- 3.查看记录各项性能指标
- (1)nginx 日志查看每秒请求数
- (2)查看 nginx 错误请求
- (3)查看机器参数:cpu idle、mem 等
- (4)查看 db、cache 等数据是否写入正常
- (5)访问接口,查看功能是否正常
七.结果分析与测试报告
- 1.根据测试过程中记录的各项参数,结合压测工具产生的日志,对测试结果进行分析,并产出测试报告
- 2.测试完成后,及时与相关人员沟通,确认是否满足需求
- 3.发送测试报告邮件