一、性能测试理论
1.什么是性能?
软件性能是软件的一种
非功能特性
,它关注的不是软件是否能完成特定功能,而是在完成功能时展现的
及时性
。
2.性能测试定义:通过
自动化的测试工具
模拟多种
正常、峰值以及异常负载
条件来对系统的各项
性能指标
进行测试。
二、不同群体眼中的性能
1.用户视角
- 还要我等多久?——响应时间
- 为什么总是失败?——稳定性
2.开发视角
- 架构设计是否合理?——架构设计
- 数据库设计是否合理?——数据库设计
- 代码是否存在性能问题?——代码
- 是否有不合理的内存使用?——代码
- 是否有不合理的线程同步操作?——代码
- 是否有不合理的资源竞争?——代码
- 代码算法是否还有进一步提升?——代码
3.管理员视角
- 服务器资源使用合理吗?——资源利用率
- 数据库使用合理吗?——资源利用率
- 系统能否实现扩展?——可扩展性
- 最多支持多少用户访问?——系统容量
- 最大业务处理量?——系统容量
- 系统有哪些潜在瓶颈?——可扩展性
- 更换哪些设备,添加哪些机器可以提高性能?——可扩展性
- 7*24H不间断访问?——稳定性
测试人员的性能视角
测试人员需要考虑
全面的性能
,包括用户,开发,管理员等各个视角的性能。(理论如此,但实际上测试兼顾不到开发的角度,目前定位到位开发问题后由开发进行优化)
测试人员在性能测试时除了要关注表面的响应时间等,也要
关注本质
,比如用户看不到的服务器资源利用率,架构设计,代码是否合理等方面。
三、性能测试类型
1.基准测试:给系统施加较低压力,查看运行情况并记录相关数据,做为
基础数据
。
2.负载测试:对系统不断增加压力或增加一定压力下的持续时间,直到某项或者多项指标到达临界值(此时临界值仍满足我们的要求性能值)。
3.压力测试:评估系统处于或者超过预期负载时系统的运行情况,即负载状态继续加压,超出峰值,关注度在于系统在峰值负载或超出最大载荷情况下的处理能力。
重点:
基准测试→负载测试→压力测试,是在对系统不断加压的过程
。
4.稳定性测试:给系统加载一定业务压力的情况下,使系统
运行一段时间
,检测是否稳定。
5.并发测试:
多个用户同时访问
同一个应用/同一个模块或者数据时,是否存在死锁或者其他性能问题。
四、性能测试的基本概念
1.
响应时间
a定义:从用户
发起请求
到用户接
收到服务器响应
的这段时间。
b关键路径:下图为一次http请求经过的路径,请求会经过网络发送到web服务器进行处理,如果需要操作DB,再由网络转发到数据库做处理,然后返回值给web服务器,最后web服务器通过网络把结果返回给用户。
图中拐点说明:
- 响应时间突然增加
- 意味着系统的一种或者多种资源达到利用的极限
- 通常可以用拐点来进行性能测试分析和定位
2.
吞吐量
a定义:单位时间内系统处理的客户端请求的数量
b计算单位:一般使用
请求数/秒
作为吞吐量的单位,也可以使用
页面数/秒
表示。另外,从业务角度也可以使用
访问人数/天
或者
访问量/天
作为单位。
c计算方法:Throughput=(number of requests)/(total time)
说明:前期因为资源充足,吞吐量是直线上升的
拐点说明:
- 吞吐量逐渐饱和
- 意味着系统的一种或者多种资源利用达到的极限
- 通常用拐点进行性能测试分析或者定位
3.
并发数
并发用户数
:某一物理时刻同时向系统提交请求的用户数,提交的请求可能是同一场景或功能,也可能是不同的场景或功能。
在线用户数
:某段时间内,访问系统的用户数,这些用户并不一定同时发起请求。
系统用户数
:系统注册的总用户数据。
三者关系:
系统用户数>=在线用户数>=并发用户数
4.资源利用率
a定义:指的是对不同系统资源的使用程度,通常以占用的最大值的百分比来衡量。
b通常要关注的服务器资源:
- CPU:中央处理器,负责数据的加工处理,就像人的大脑。
- 内存:大脑中的记忆区域,负责提供数据供CPU进行判断,但是是临时的,断电数据就消失。rom只读,ram随机。
- 外存(磁盘IO):大脑中的记忆区域,永久保存数据,速度慢。电脑中的C盘D盘都是外存。
- 网络:带宽
说明:前期因为资源充足,会直线上升,后期利用率饱和后持平。但是硬件一般不会崩掉,只是处理时间变慢。
拐点说明:
- 服务器某些资源使用达到饱和
- 通常可以用拐点进行性能测试分析与定位
资源利用的曲线图要和响应时间的曲线图结合起来看,比对响应时间拐点和资源拐点的关系,就可以判断出是否是硬件资源导致的响应时间变慢。
5.其他概念
TPS:每秒事务数,事务是自己定义的,可以包含多个接口请求,也可以一个请求就是一个事务。
PV:Page View页面访问量,访问一个url就产生一个PV。
UV:Unique Visitor,一个独立用户访问站点的所有页面都算作一个uv。
说明:性能测试是基于接口做的,前端的页面操作对性能并不会产生影响,只有调用接口才会对服务器性能产生影响。