性能测试概念
性能测试的意义
现状
互联网行业发展快,用户量大大增加;
业务和系统架构越来越复杂,数据越来越多,用户不仅仅满足于功能的实现,在某些场景下,更在意系统性能。
什么是性能测试
通过一定的手段,在多并发情况下,获取被测系统的各项性能指标,验证被测系统在高并发下的处理能力、响应能力,稳定性等,能否满足预期。定位性能瓶颈,排查性能隐患,保障系统的质量,提升用户体验。
什么样的系统需要做性能测试
1. 用户量大,PV比较高的系统(PV代表浏览量)
2. 系统核心模块/接口(非常重要,不容有失的接口,核心)
3. 业务逻辑/算法比较复杂(例如一些加密解密运算比较高,CPU占用较高)
4. 促销/活动推广计划(电商,人数较多)
5. 新系统,新项目
6. 线上性能问题验证和调优(比如线上经常挂,问题复现)
7. 新技术选型(采用新框架或新组件,想要保证技术不能更差,新的框架和旧的框架都测一下,以便来决定是否采用新的框架)
8. 性能容量评估和规划(在现有的基础上,线上测试来决定需要增加多少容量)
9. 日常系统性能回归(例如:每过一个月,测下性能【线下测试】)
性能测试指标—TPS
事务
在性能测试领域里,衡量一个系统性能的好坏,主要看的是单位时间内,系统可以处理多少业务量。各个系统的业务各不相同,为了方便使用统一指标来衡量业务的性能。用事务来代表业务操作,一个事务可以代表一个业务,也可以代表多个业务操作。事务是用户定义的,想测试什么业务的性能,就把该业务加到事务中。
TPS/QPS
Transaction Per Second 每秒处理的事务数。
QPS 每秒钟的查询量【每秒钟发了多少个请求】
性能测试指标—平均响应时间
一个请求的响应时间都包含哪些时间?
响应时间=网络传输的总时间+各组件业务处理时间
平均响应时间:在测试过程中,所有请求的平均耗时
性能测试指标 —TOP响应时间
TOP响应时间
将所有请求的响应时间先从大到小进行排序,计算指定比例的请求都是小于某个时间。该指标统计的是大多数请求的耗时。
Tp90(90%响应时间):90%的请求耗时都低于某个时间
Tp95(95%响应时间):95%的请求耗时都低于某个时间
Tp99(99%响应时间):99%的请求耗时都低于某个时间
TOP响应时间算法:响应时间按降序排序,找到90%的位置(大多数请求的范围值)
备注:接口响应时间超过s,性能响应极差,需要优化。一线公司要求:接口响应时间如果是高频接口响应时间一般低于100ms,如果是低频接口响应时间一般低于200ms【参考公司内部规范】,超过200ms,性能比较差;超过500ms性能很差
静态页面一般存放于CDN里边。
性能测试指标
并发数/虚拟用户(Vuser)
压测工具中设置的并发线程/进程数量
成功率
请示的成功率
PV(Page View)
页面/接口的访问量
UV(Unique Visitor)
页面/接口的每日唯一访客【一般通过IP进行过滤,代表有多少人访客网站,日活跃用户】
吞吐量
网络中上行和下行的流量总和,吞吐量代表网络的流量,TPS越高,吞吐量越大
TPS、响应时间和并发数的关系
在系统达到性能瓶颈之前,TPS和并发数成正比关系
响应时间单位为秒的情况下:
TPS = 1/响应时间*并发数
TPS = 并发数/响应时间
性能测试流程
1. 需求调研
2. 测试计划
3. 环境搭建
4. 数据准备
5. 脚本编写
6. 压测执行
7. 调优回归
8. 测试报告
性能测试流程—需求调研
1. 项目背景
2. 测试范围【一般只测主要接口】
3. 业务逻辑&数据流向
4. 系统架构【布置架构、组件、数据库、缓存、中间件】
5. 配置信息【硬件配置,CPU几核,内存是几G的,这两比较重要,尽量与线上保存一致】
6. 测试数据量(量级要一致)【基于多少数据测,如果线上有100万数据,测试也要有100万数据】
7. 外部依赖【mock】
8. 系统使用场景,业务比例【比如一个系统同一时间,有人在登录,有人在注册,所以业务比例要确定】
9. 日常业务量
10. 预期指标
11. 上线时间
性能监控指标
操作系统级别监控
CPU使用率、内存使用率、网络IO(input/output)、磁盘(read/write/util)
中间件监控
连接数、长短连接、使用内存
应用层监控
线程状态、JVM参数、GC频率、锁
DB层监控
连接数、锁、缓存、内存、SQL效率
性能测试流程—测试计划
1. 项目描述
2. 业务模型及性能指标
3. 测试环境说明
4. 测试资源
5. 测试方法以及场景设计原则
- 基准测试【单个用户来跑,添加新功能对比一下,性能是否下降。一般是跑3分钟或者5分钟】
- 单交易负载测试【较重要】
- 混合场景测试【较重要】
- 高可用性测试
- 异常场景测试
- 稳定性测试【短时间内测不出来,一般要跑12个小时或24个小时】【较重要】
- 其他特殊场景
6. 测试进度安排及测试准则
性能测试流程—环境搭建
注意要点
1. 测试机器硬件配置尽量和线上一致
2. 系统版本与线上一致
3. 测试环境部署线上最小单元模块
4. 应用、中间件、数据库配置要与线上一致
5. 其他特殊配置
性能测试流程—数据构造
测试数据分为两部分:基础数据和参数化数据
通常采用以下三种方法进行构造
业务接口
- 适合数据表关系复杂
- 优点:数据完整性比较好
存储过程
- 适合表数量少,简单
- 优点:速度最快
脚本导入
- 适合数据逻辑复杂
- 自由度比较高
性能测试流程 — 脚本编写
1. 选择工具(Loadrunner、Jmeter、Locust等)
2. 选择协议(Http、TCP、RPC)
3. 参数化
4. 关联
5. 检查点
6. 事务判断
性能测试流程 — 压测执行
1. 分布式执行
2. 监控
- Linux
- Jvm
- 数据库
3. 收集测试结果
4. 数据分析
5. 瓶颈定位
注意:CPU占用率超过80%,添加机器
性能测试流程 — 调优回归
1. 性能调优需要整个团队完成
2. 反复尝试
3. 回归验证
4. 监控工具
5. 全链路排查
6. 日志分析
7. 模块隔离
性能测试流程 — 测试报告
1. 概述
2. 测试环境
3. 结果与分析
4. 调优说明
5. 项目时间表
6. 结论
7. 建议