基础理论
概念
性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程
QPS:即Queries Per Second的缩写,每秒能处理查询数目。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。每秒钟处理完请求的次数;注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。QPS = 并发量 / 平均响应时间
TPS:即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。
RPS:即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS。
PV:page view,页面浏览量,用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。
UV:Unique visitor,独立访客,通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。
IP:Internet Protocol,本意本是指网络协议,在数据统计这块指通过ip的访问量。 即同一页面,客户端使用同一个IP访问多次只计算一次,访问量不累计。
RT:响应时间,处理一次请求所需要的平均处理时间
目的
评估当前系统能力 寻找性能瓶颈,优化性能 评估软件是否能够满足未来的需要
测试流程
曲线拐点模型
性能测试场景(策略)
基准测试
概念
侠义:测试环境确定后,对业务模型中的重要业务做单独的测试,获取单用户运行时的各项性能指标
广义:建立基准线,当系统的软硬件环境发生变化之后,再进行一次基准测试以确定变化对性能的影响用途:
基准测试不会单独存在
为多用户并发测试和综合场景测试等提供参考依据
为系统/环境配置、系统优化前后的性能提升/下降提供参考指标
负载测试
概念:通过逐步增加系统负载,确定在满足系统的性能指标(如响应时间等)情况下,找出系统所能够承受的最大负载量的测试
作用:系统最大负载量达到用户要求时,系统才能正式上线使用
稳定性测试
概念:在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天-1周等),并最终保证服务器能满足线上业务需求
作用:系统在用户要求的业务负载下运行达到规定的时间时,系统才能正式上线使用
压力测试
概念:在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力
测试场景:
高负载下的长时间的稳定性压力测试
极限负载情况下的破坏性压力测试
并发测试
概念:在极短的时间内,发送多个请求,来验证服务器对并发的处理能力 应用场景:特定活动场景,如:抢红包、秒杀、抢购等
强度测试
强度测试检查程序对异常情况的抵抗能力;是检查系统在极限状态下运行的时候性能下降的幅度是否在允许的范围内。
强度测试总是迫使系统在异常的资源配置下运行。
1.当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;
2.定量地增长数据输入率,检查输入子功能的反映能力;
3.运行需要最大存储空间(或其他资源)的测试用例; 4.运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例,等等。
容量测试
容量测试的目的是通过测试,预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限状态下,没有出现任何软件故障或还能保持主要功能正常运行。 容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。 容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。 可以看作系统性能指标中,一个特定环境下的一个特定性能指标,即设定的界限或极限值。
性能指标
响应时间
从客户端发起请求开始,到接收到结果的总时间,网络传输时间+服务器处理时间,不包括前端页面处理和渲染时间 测试方式:HTTP接口请求响应时间
并发(用户)数
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量,同一时刻向服务器发送请求的用户数,
吞吐量(Throughput)
单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力
业务角度
单位:“业务数/小时”、“业务数/天”、“访问人数/天”、“页面访问量/天”
网络角度
单位:“字节数/小时”、“字节数/天”
技术角度
每秒查询数(QPS)单个请求
每秒事务数(TPS)一个请求/多个请求
QPS和TPS关系
一个事务对应一个请求时 TPS = QPS
一个事务对应n个请求时 QPS = n * TPS
点击数
指客户端向服务端发送请求时,所有的页面资源元素(如:图片、链接、框架css、js等)的请求总数量 注意:只有web项目才有此指标,点击数不是页面上的一次点击
错误率
指系统在负载情况下,失败业务的概率,错误率=(失败业务数/业务总数)*100% 注意点:错误率是一个性能指标,不是功能上的随机bug,大多系统都会要求错误率无限接近于0
资源使用率
系统各种资源的使用情况,资源的使用量/总的资源可用量×100%
资源指标
CPU使用率:不高于75%-85%
内存(大小)使用率:不高于80%
磁盘IO(速率):不高于90%
网络(速率):不高于80%
监控分级体系
性能瓶颈分析
服务器资源分析
CPU瓶颈:CPU已压满(接近100%),通常其他指标的拐点出现的时刻是否与CPU压满的时刻基本一致
查看CPU:top
内存瓶颈:内存不足时,操作系统会使用虚拟内存,从虚拟内存读取数据,影响处理速度
查看内存:vmstat
磁盘I/O瓶颈:磁盘I/O成为瓶颈时,会出现磁盘I/O繁忙,导致交易执行时在I/O处等待
查看磁盘IO:iostat -x 1 1
网络带宽:如果传递的数据包过大,超过了带宽的传输能力,就会造成网络资源竞争,导致TPS上不去
查看网络接口信息:sar -n DEV 1 1
JVM瓶颈分析(Java项目)
Java 虚拟机在执行 Java 程序的过程中所管理的不同的内存数据区域。可简单分为:堆内存和非堆内存
测试关注点
1.堆内存使用量持续增长 —— 可能是内存泄漏
2.Full GC比较慢,执行时会停止程序一些事务的处理。因此Full GC频率不能过高(低于10分钟)
3.如果Full GC之后,堆中仍然无法存储对象,就会出现内存溢出 —— 程序出现crash(崩溃)
内存