一、性能测试理解
- 什么是软件的性能? 响应时间和及时处理能力
- 什么是性能测试? 是一种软件测试方法,评估软件系统在不同负载条件下的表现
- 什么样的系统需要做性能测试? 用户量大,访问量高的系统
- 为什么要做性能测试,性能测试目的?
为了评估当前系统能力,寻找性能瓶颈,优化性能,评估软件是否能够满足未来需要 - 什么时候需要做性能测试?
- 业务系统对性能有明确的要求,功能核心模块基本完成
- 验证在高并发下:系统业务是否有问题(功能缺陷),技术架构是否有问题(性能调优),系统是否可靠运行(稳定性缺陷)
- 验证在系统变更后,系统性能表现变化请求(基准测试)
二、性能测试分类
性能测试策略(类型):基准测试、负载测试、稳定性测试、压力测试(稳定性测试、破坏性测试) 、失效性测试、容量测试
负载测试(线程数50-100-150):系统上不断增加压力,直到响应时间或tps达到一个拐点,主要目的是找到系统处理能力的极限
压力测试:在负载一定的情况下(比如说压测100),持续运行一段时间,比如7×24小时来验证系统的稳定性 也叫稳定性测试
基准测试:每一次版本迭代都需要做基准测试,目的是对比上一次的测试结果(单接口和多接口),给出调优依据
破坏性测试 : 在最大压测下出现服务器异常,直到不能访问
失效性恢复测试:系统异常后,能否及时的恢复正常(N分钟后)
容量测试:考察系统在未来时间段内能支撑的大并发,系统需要的硬件设施(未来10万或者50万用户数)
性能测试顺序:基准测试–负载测试–压力测试(80%保证系统长时间运行-稳定性测试(24h×n的时间性能体现))-破坏性测试–失效恢复测试–容量测试
性能监控指标:响应时间 错误率 tps(单位时间发起的请求数) 资源使用率(CPU占用率、内存使用率、磁盘I/O、网络I/O)
Tips:针对单场景和多场景业务的压测(一般都在拐点内),也都可称为负载测试
三、性能测试流程
性能需求分析–制定测试计划–编写测试用例–搭建测试环境–构造测试数据–脚本开发–结果分析/测试报告–性能调优
性能需求分析:
充分理解系统业务 关键功能场景手工跑一边(解决业务、导出性能测试场景))
充分理解系统环境 测试环境自己搭一遍
充分理解系统通讯协议 自己抓包复现一遍
四、性能术语
并发: 从业务的角度模拟真实用户同时访问
并发数:同时访问系统的用户数
侠义并发: 多用户在同一时间内做同一件事情或操作, 这种操作一般针对同一类型的业务 —单场景
广义并发: 多用户在同一时间做不同的事情或操作, 这种操作一般针对不同一类型的业务 —多场景
Tips:1个用户做很多场景没意义,每秒点击500次,不存在(不在性能控制,在安全考虑范围,防火墙内控制,所以性能里面的并发指多用户并发)
在C/S和B/S结构中,系统的性能占用由服务器决定,服务器在大量用户同时访问时,压力最大
狭义并发强调对系统的请求操作是完全相同的,多适用于性能测试、负载测试、压力测试、稳定性测试场景;
广义并发不限制对系统的请求操作,多适用于混合场景、稳定性测试场景。
用户数概念
系统用户数:系统的注册用户数,也可能僵尸用户 — --容量测试(模拟不断的注册,磁盘达到80%自动扩容还是手动)
在线用户数:登录系统的用户,状态是在线的,不一定对服务器产生压力
并发用户数:某一时刻同时向服务器发送请求的在线用户数,例如3S内 1分钟内
事务:是指用户在应用系统中为完成某项业务,所做的一组请求的集合。一项业务中可以包括多个事务,如 查询、保存等等都可分别定义为一个单独的事务
登录可也作为一个事务,登录+浏览首页也可以作为一个事务
错误率:指系统在负载情况下,失败业务的概率,
错误率=错误请求数/总请求数*100%(一般涉及到(医疗 金融 税务)错误率0容忍,其他看企业的要求)
响应时间:从客户端发起一个请求开始,到客户端接收到从服务端返回的结果,整个过程所耗费的时间
注意:通过HTTP接口请求消息来测试,不包括发消息时前端页面的处理时间和接收消息后前端页面的渲染显示时间
一般在6ms-8ms之间
吞吐量:指的是单位时间内处理的客户端请求/事务数量(在网络上叫吞吐量,性能测试中叫TPS)
不严格意思上说就是tps,指服务器返回给客户端的数据字节的总和,TPS越高,系统的吞吐量也会越大(TPS:每秒事务数 QPS:每秒请求数),对于系统:吞吐量指标直接反映的是服务器的承受能力(系统的负载能力)
TPS:性能测试中非常重要的指标之一,也称每秒事务数,服务器每秒能够处理的事务数,衡量服务器处理能力的(每秒完成响应的请求数), 一般情况下,tps越高,性能越好
TPS的计算方式:
- 公司产品明确给出
- 二八计算方法 TPS=总请求数*80%/总时间的20%(41300×0.8/24×3600×0.2s=1.91请求数/s)
- 通过真实数据
单接口:发起了100个请求,返回了90个响应(每秒完成的响应的请求数),
多接口:单位时间完成的事务数(abcde)5个接口在一起,一整个流程的完成视为一个事务
资源利用率–或资源使用率:
说明: 系统各种资源的使用情况,使用率=一般用(资源使用量/总的资源可用量×100%)
常见的资源使用率指标:cpu、内存、网络不高于80%,磁盘不高于90% —越低越好
CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)
现在的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内存是否有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
Tips:1. 根据客户的要求 2. 根据公司要求指标
PV和UV
pv:Page View页面浏览数,指用户访问每个页面的次数
uv:Unlque Vlew唯一访问量(用户的名来做唯一标识符)
思考时间(固定定时器1-2s):指用户进行操作时每个请求之间的间隔时间 为了模拟时间间隔,引入思考时间来更加真实的模拟用户操作
内存和磁盘的区别?
内存条的速度比硬盘块快100倍以上
内存条和硬盘都是计算机中常见的存储设备,但它们的速度有着显著的差异。内存条采用的是DDR(双倍数据速率)技术,其传输速度可达到每秒数千兆字节;而硬盘则主要采用机械臂寻址读取数据,其传输速度则只有几十兆字节每秒。因此,内存条的速度比硬盘块快100倍以上,当CPU需要与存储器频繁交换数据的时候,硬盘的速度是无能为力的,所以需要内存来代替硬盘
DDR3内存读写速度大概10G每秒(10000M)
固态硬盘速度是300M每秒,是内存的三十分之一
机械硬盘的速度是100M每秒,是内存的百分之一
内存读数据在ns级别,磁盘读数据在ms级别,后期考虑到性能问题,
优化1:大量用户下都会用到redis数据库(基于内存储存)
优化2:内存加大