性能测试理论
性能测试术语
响应时间
响应时间=网络时间+应用程序处理时间
response time :
3秒以内表现好的 3-5秒中间表现 超过5秒一般性的不能接受 超过响应时间,一般会出现timeout
例如:拉勾网的职位搜索翻页的响应时间
并发用户数
性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,比如一个游戏,是否可以承受同时在线人数一个亿的人同时进行玩游戏
并发用户数:N个用户向服务发送请求 在线用户数:仅仅在线,但是并不代表发送了请求,僵尸用户
并发用户数秒,可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。
性能计数器:
WebServer:HTTP连接数 应用Server:服务被部署的系统的CPU和内存资源 DataServe:IOPS
IOPS
该术语主要是针对数据库的,也就是每秒发生的读写操作的次数,是数据传输的一个度量方法。用于磁盘的读写,IOPS值的是每秒读和写的次数。
TPS/QPS
事务指的是某个操作或者是一组操作的组合,如登录的事务那么就是输入账户和密码,点击登录按钮跳转到登录成 功的?面并且信息都加载出来。
TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。
QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
吞吐量
主要用于数据传输方面,也就是被测试系统的执行效率。该术语用于描述数据传输速度(字节/秒或者比特/秒),在 某些情况下(如DB层面),吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,直接体现系统的性能承载能力。
Throughput----吞吐量即表示每秒完成的请求数
延时
延时是描述操作里用来等待服务的时间,也就是客户端发送请求后,用来等待服务端返回给客户端的响应时间
使用率
对于服务所请求的资源,使用率描述的是所给定的时间区间内资源的繁忙程度,对于存储资源来说,使用率就是所消耗的存储容量,如果使用大量内存,导致内存泄漏(oom),怎么解决?我们可以通过队列来解决,比如做核酸检测排队,先进先出。
队列: 先进先出
饱和度
指的是某一资源无法满足服务的排对工作量,可以结合“线程等待队列”的理论我详细的解释。举一个生活中的例 子,一个停?场最多可以停?是100辆车,那么停满99辆?以及100辆?的时候,这个时候?场的饱和度处于高负载。
资源: 内存和CPU
CPU密集型:应?程序执?繁重的计算,通常运?时间?较?,会占??量的CPU IO密集型:应?程序执?I/O,计算不多,会占??量的内存资源 系统的最?粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。
Out Of Memory(OOM):内存泄露
如?个业务中,会使??量的内存资源,总的内存资源是4G,在?定数据量的情况下执?该业务形态,内存使?率从100M?直占?到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内存使?率最?为75%
性能测试模型
性能测试模型可以理解为性能测试步骤,具体汇总如下:
测试前期准备
测试工具技术引入
- Loderunner (收费、类c语言、需要序列号、最大模拟用户数是1000)
- jmeter (java技术栈的,都会进行二次开发,开发成性能测试的平台)
- locust (python技术栈的)
- 自己开发工具
性能测试计划
- 人力
- 做什么?
- 什么时候开始?什么时候结束?
- 使用什么技术?
测试设计与开发
- 工具/代码如何写?
- 具体的脚本
测试执行与管理、数据收集
- 数据库资源--iops
- linux--cpu、memory
- nginx--连接数
- 响应时间、吞吐量等资源
测试分析
性能测试的方法
验收负载测试
在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否能满足生产魂晶的性能诉求
负载测试
在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量。压力测试
该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点:
- 检查系统在处于压力情况下时应用的性能表现
- 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上)
- 这种方式一般用于测试系统的稳定性
配置测试
被测环境软硬件环境参数的调整,达到最优的分配原则。
并发测试模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是:
- 发现系统中可能隐藏的并发访问的问题
- 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况
- 使用的测试工具如profiler等
可靠性测试
给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行。故障演练
容灾恢复测试Jmeter聚合报告参数
Label----每个请求的名称,比如HTTP请求等
#Samples----发给服务器的请求数量
Average----单个请求的平均响应时间
Median----50%请求的响应时间
90%Line----90%请求响应时间
95%Line----95%请求响应时间
99%Line----99%请求的响应时间
Min----最小的响应时间
Max----最大的响应时间
Error%----错误率=错误的请求的数量/请求的总数
Throughput----吞吐量即表示每秒完成的请求数
Received KB/sec----每秒从服务器端接收到的数据量
Sent KB/sec----每秒从客户端发送的请求的数量
把请求地址分离出来用http请求默认值
比用户定义的变量的优点:不用调用
性能测试的流程:
1、分析性能测试的需求
2、梳理性能测试的场景
3、编写性能测试的方案
4、和相关的人一起制定性能测试的目标(测试去主导,但是和相关的人一起来制定)
5、编写性能测试的计划
6、执行具体的性能测试过程,收集性能测试的数据
7、和大家针对性能测试的结果,来再次核对是否达到目标
性能测试需要关注的点:
程序的响应时间
服务器的资源情况
程序的稳定性
客户端也有最大的瓶颈,我们在性能测试的过程中,不要超过我们客户端的最大瓶颈
性能测试的目标是验证在一定的产品目标下,产品的整体程序情况是否能够满足这个具体的目标
性能测试属于稳定性测试
稳定性不仅仅考虑的是满足这个目标,还需要考虑如下几点: 1、是否存在超时情况 2、是否存在服务崩溃的情况(一直持续的发送请求,看服务是否都能够正常的响应)又叫负载测试。