软件性能
- 定义:软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
性能测试定义:指通过自动化测试工具模拟多种正常,峰值以及负载条件对系统的各项性能指标进行测试。
不同人眼中的性能
- 用户眼中的性能
- 还要让我等多久? --响应时间
- 为什么总是失败? --稳定性
- 开发眼中的性能
- 架构设计是否合理? --架构设计
- 数据库设计是否合理? --数据库设计
- 代码是否存在性能问题?--代码
- 是否有不合理的内存使用? --代码
- 是否有不合理的线程同步操作? --代码
- 是否有不合理的资源竞争? --代码
- 代码算法是否还能有进一步提升? --代码
- 系统管理员眼中的性能
- 服务器资源使用是否合理? --资源利用率
- 数据库使用是否合理? --资源利用率
- 系统能否实现扩展? --可扩展性
- 最多支撑多少用户访问? --系统容量
- 最大业务处理量? --系统容量
- 系统有哪些潜在的瓶颈? --可扩展性
- 更换哪些设备,添加哪些机器可以提高系统性能? --可扩展性
- 7*24 小时连续不间断业务访问? --稳定性
- 测试人员眼中的性能
- 测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
- 测试人员在做性能测试时除开要关注表面的现象如响应时间,也需要关注本质,比如用户看不到的服务器资料利用率,架构设计是否合理?代码是否合理等言方方面面。
性能测试基本概念
响应时间
- 定义:从用户发送一个请求到用户接收到服务器返回的响应数据这段时间就是响应时间。
- 计算方法:
client | web server | data server | |
N1 | A1 | N2 | A2 |
N4 | A3 | N3 | A2 |
Response time = (N1+N2+N3+N4)+(A1+A2+A3) |
吞吐量
- 定义:单位时间内系统处理的客户端请求的数量
- 计算单位: 一般使用请求数/秒作为吞吐量的单位,也可以使用页面数/秒表示
- 计算方法:Throughput = (number of requests)/ (total time)
并发数
- 并发用户数:某一物理时刻同时向系统提交请求的用户数,提交的请求可能是同一个场景或功能,也可以是不同场景或功能。
- 在线用户数:某段时间内访问系统的用户数,这些用户不一定同时向系统提交请求。
- 系统用户数:系统注册的总用户数量
- 三者之间的关系:系统用户数 >= 在线用户数 >= 并发用户数
资源利用率
- 定义:指得是对不同系统资源的使用程度,通常以占用最大值的百分比来衡量
- 通常需要关注的服务器资源如下:
- cpu:就像人的大脑,主要负责相关事情的判断以及实际处理的机智
- 内存:大脑中的记忆快区,将眼睛,皮肤等收集到的信息记录起来的地方,以供cpu进行判断,但是是临时的,访问速度快,如果关机或断电这里的数据会消失。
- 磁盘IO:大脑中的记忆区块,将重要的数据保存起来(永久保存,关机或断电不会丢失,速度慢),以便将来再次使用这些数据。
- 网宽
其他常用的指标
- PV:访问一个URL,产生一个PV(Page View,页面访问量),每日每个网站的总PV量是形容一个网站规模的重要指标。
- UV: 作为一个独立的用户,访问站点的所有页面均算作一个UV(Unique Visitor,用户访问)。
- 思考时间:用户每个操作后的暂停时间,或者叫操作之间的间隔时间,此时间是不对服务器产生压力的。
- 事务:性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次筛选条件查询,一次支付等。
- TPS:Transactions Per Sencond ,每秒事务数
- 点击数:每秒钟用户向WEB服务器提交的HTTP请求数。这个指标是WEB应用特有的一个指标:WEB应用是"请求-响应"模式,用户发出一次申请,服务器就要处理一次,所以点击是WEB应用能够处理的交易的最小单位。如果把每次点击定义为一个交易,点击率和TPS就是一个概念。容易看出,点击率越大,对服务器的压力越大。点击率只是一个性能参考指标,重要的是分析点击时产生的影响。需要注意的是,这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求.
性能测试类型
基准测试
- 定义:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考。
负载测试
- 定义:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
压力测试
- 定义:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
稳定性测试
- 定义:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
并发测试
- 定义:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。