性能测试理论(一)
软件测试分类:
1.功能测试:
指的是把测试对象看做一个 黑盒子,测试人员完全不考虑程序内部结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。 功能测试又叫做黑盒测试或数据驱动测试。
2.自动化测试
UI自动化测试
API自动化测试(接口自动化测试,主要针对后端)
3.性能测试
4.安全测试(渗透测试)
性能测试概念:
性能测试是通过性能测试工具或者脚本,模拟多用户来向服务器发送请求,监控服务器的性能指标,发现性能瓶颈,进行性能优化的一个过程。
性能测试学习点:
1.性能测试理论
2.性能测试方法
3.性能测试工具实战
4.代码级别的性能测试
5.资源监控
性能对软件而言是一种指标,是衡量软件用户体验最核心的指标之一,给用户最直观的感受就是产品的响应时间。
衡量一个产品的性能指标有很多,但主要是响应时间(反应快还是反应慢)以及吞吐量(同时允许多少个人访问这个系统,比如一码通,是否支撑1000万人同时进行核酸检测)
怎么查看响应时间?
1.打开网页,右键点击检查,
2.点击network
3.点击clear按钮,点击刷新,查看响应时间
资源竞争:资源有限,但是竞争的程序有点多,那么这个时候优先抢到资源的,就可以优先执行。
用户立场:
在用户的角度而言,软件性能就是用户操作的响应时间。一般而言关于响应时间业界的说法具体如下:
• 1-3秒,属于优的表现
• 3-5秒,可以接受,属于中间的表现
• 5秒以上,无法接受
在实际的工作里面,如果测试的一个页面,响应时间大于5秒,那么一般情况下,需要反馈程序员,也就是说提交一个优化的问题单
运维视角
运维:维护服务器,管理服务器的,还有就是负责公司的网络环境。阿里云,IBM的小型服务器
运维除了关注响应时间外,也会关注更多底层的资源信息,这些资源信息具体可以汇总为如下:
• 系统资源(CPU和内存memory)
• 数据库资源(IOPS资源)数据库是存储数据的,对应数据库而言,读写的速度就显得非常重要,衡量读写的速度的指标是IOPS
• JVM内存是否够用:Java语言特点是跨平台的,Java跨平台是通过Jvm来实现的,就是Java编写的程序都有内存的大小设置,如果程序超过这个内存的大小设置,那么就出现了内存泄露(Out Of Memory ,OOM)
• 系统的最大容量
开发视角
开发的关注度会更加的全面,毕竟代码都是程序员来编写的,具体可以汇总为如下:
• 前后交互的响应时间
• 中间件的参数设置
• 内存释放泄露
• 连接数泄露
• 是否存在不合理的内存使用方式
• 是否存在不合理的线程同步方式
• 系统中是否存在不合理的资源竞争
• 系统架构&代码结构
中间件的参数设置:
中间件(RabbitMQ,Kafka,Redis)
Redis缓存穿透 存到内存里面,这样的目的设计上是合理的,这样的目的是查询的时候读取速度很快
连接数泄漏:
数据库(DB):程序员需要查询数据,前提是连接到数据库,但是资源有限,如果之前的占用了没释放,那么会导致后面的连接不上,然后就泄漏了。
架构:单体架构----》垂直架构---〉SOA架构----》微服务架构
单体架构:所有的代码整合到一起
垂直架构:按照模块来整合不同的代码
SOA架构:不同模块之间的数据
微服务架构:按照业务类型把每个业务写成一个服务
SAAS:Software As A Service 中文意思:软件即服务 PAAS: Platform As A Service 中文意思:平台即服务
测试视角
用户关注的视角属于全栈性的,需要考虑用户视角的产品体验,也要监控以及关注运维视角和开发视角,所以性能测试中测试的具体工作职责可以总结为:
• 设计合理的场景和测试用例来验证系统的资源数据
• 验证在高并发的情况下架构是否满足
• 给架构师以及开发人员提供中间件配置参数的合理值范围
• 使用技术手段监控系统,DB,中间件,全链路监控的方式来监控系统资源情况
WEB前端 所谓前端的性能目前也是性能测试中比较热门的技术之一,关注的点具体汇总为如下:
• 浏览器的资源加载(HTML解析,图片资源加载,CSS文件资源加载)
• 前端缓存技术的优化是否合理性
• 前端与后端的交互性耗时
一、性能测试常用术语
1.响应时间
⼀次操作完成的时间,也就是客户端发送请求到服务端后,服务端返回到客户端的响应数据的时间。包含了⽤于等待和服务的时间,也包括⽤来返回结果的时间。
具体如下图所示:
客户端→路由器→nginx中间件→淘宝服务→淘宝数据库
响应时间=⽹络时间+应⽤程序的处理时间
2.并发用户数
性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,比如王者荣耀的游戏,是否可以承受同时在线人数一个亿的人同时进行玩游戏?
并发用户数,可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。
一码通而言:场景早上6点至7点学生上班族都开始做核酸检测,那么并发用户数指的是这个时间段服务端能够承受的最大用户数,吞吐量指的是这个时间段,每秒能够同时多少人进行核酸检测
3.吞吐量
主要⽤于数据传输⽅⾯,也就是被测试系统的执⾏效率。该术语⽤于描述数据传输速度(字节/秒或者⽐特/秒),在 某些情况下(如DB层⾯),吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,直接体现系统的性能承载能力。
性能计数器:
指的是性能测试过程中,需要收集哪些数据,并且收集的这些数据对性能测试有帮助 系统:cpu memory db:iops
被测系统:响应时间,并发用户数,吞吐量
性能测试什么时候开始合适?
性能测试最好建议是在功能测试的基础上,也就是说系统测试的没什么问题了,再做性能测试
4.使用率
对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。对于存储资源来说,使⽤率指的就是所消耗的存储容量。如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该 业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内 存使⽤率最⾼为75%,可能会存在OOM的错误信息,也可能会存在内存泄露的情况。所以使⽤率分两个维度,⼀ 个是系统资源的使⽤率,另外⼀个是系统内部署服务对系统资源的使⽤率。
当系统的资源使用率(cpu和内存)达到60%以上,那么可能系统就会存在很卡的情况。
5.思考时间
思考时间英文名称是Think Time,也称为休眠时间,在业务视角,思考时间指的是用户在进行操作时,每个请求之间的间隔时间。
6.IOPS
该术语主要是针对数据库的,也就是每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的 读写,IOPS指的是每秒读和写的次数。
两个维度:
1.针对磁盘
2.针对数据库的读写
事务:一系列操作动作的组合,如登录,输入账户,输入密码,点击登录按钮,可以说是登录的事务
TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量
QPS指的是每秒查询率
二、性能测试理论
1.资源调度
系统的资源是有限的,假设所有的程序都启动,很明显资源不够,那么这个时候谁先执行,谁后执行。谁先抢到资源,谁先执行,这个过程中资源会不停的切换。
在操作系统的级别上,进程是操作系统最小的运行单位,什么是进程,进程是每个程序运行后,都是一个独立的进程。例如打开的钉钉是一个进程,现在的软件都是可以同时干很多事,比如抖音,可以同时看视频,看视频的同时可以发评论,也可以聊天,这个过程中,发评论,聊天看视频,都是由线程来支撑执行的,所以,现在的软件可以说是多线程的模式。在进程角度,多线程内部都是共享数据的(如你拿你的抖音看视频,聊天,发私信,其实是同一个人)。
调度策略:在资源有限的情况下,所有的任务都可以执行,但是如果资源在不够的情况下,那么就会有排队的机制。
排队机制:
队列Queue(数据结构)原则是先进先出。有这么几个方法:
put()进队
get()出队
empty():队伍是否为空
• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU
• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。
2.等待队列
在程序中,都会涉及到等待队列的,不管是同步交互还是异步的交互中,都会涉及它的最⼤队列,这样设计的核⼼ 思想是防⽌在客户端⾼并发的情况下服务端在没有队列的情况下出现雪崩以及最终导致服务端出现瘫痪。
服务端的稳定性测试怎么保障?
客户端在高并发的情况下发送请求给服务端,服务端处理能力有限,导致资源出现瓶颈的同时,排队的任务越来越多,最后服务端就出现了瘫痪。为了服务端不出现崩溃,服务端一般会使用队列的机制,具体地说就是服务最多可以处理任务是30个,那么如果过来的任务是少于30个,全部同时处理,如果过来的任务是100个,那么70个任务是排队的。
1、队列设置的值是多少?最⼤可以运⾏的任务是多少?
2、需要测试到排队的策略机制,也就是说模拟⼤批量的程序进⾏排队,然后⼀个任务执⾏结束后,队列位置释放 ⼀个,等待中的可以⽴刻进⼊然后执⾏,这中间就设计到先进先出还是先进后出,以及线程优先级的设计策略
3、线程在排队的过程中,设置最⼤的等待时间是多少,也就是说⼀个线程不可能永远处于等待中,那么等待多 久,还是没到执⾏的阶段,这个时候服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时 间
4、那么⼀个线程完整的时间是由三部分组成的,响应时间:客户端发起请求的时间+访问等待时间+逻辑执⾏时间 +返回给客户端的时间。⼀般在测试中,可以把每个线程名称设置为uuid,这样它都是独⽴的,可以依据这个 uuid,让开发同学配合输出每个阶段的时间输出,然后就可以得到每个阶段的具体时间了,根据时间再来判断时间 是否优化。
面试题
1,性能测试前需要什么准备
1,性能测试主要依据是需求文档来确定性能目标,通常我们会召开会讨论,产品经理,测试主管,开发等等人员得到一致的性能要求结论
2,制定性能测试计划,讲模块分割进行分配
3,根据性能场景来编写性能测试用例
4,召开用例评审会议,确定用例的最终版本
2,在性能测试过程中,开发要求增加服务器才可以开始性能测试,这时候你会?
我肯定会拒绝开发的要求,性能测试的前提是保证,生产环境和测试环境是具备同样的配置,当测试环境增加服务器,这样进行的性能测试得出的性能测试报告就不具备参考价值
3,日常使用什么工具进行性能测试,性能测试的参数都有哪些?
我们日常使用的工具是jmeter,我了解过的工具还有loadrunner,他们两个的区别是,jmeter是基于java开发的免费测试工具,而loadrunner是惠普开发的工业级性能测试付费工具,我们的日常工作中主要使用的是jmeter,性能测试中,系统资源:CPU和内存,数据库资源:连接数和IOPS,JVM资源:内存资源 响应时间:最大,最小,平均,中位数,90%,95%,99%,吞吐量
4,性能测试是怎么做的?
首先我们会通过需求文档及各方讨论,来确定本次性能测试的目标,然后测试负责人会去制定测试计划,将测试模块具体分割,测试人员再去编写测试用例,统一评审用例,然后选择合适的测试工具来收集测试数据,性能测试需要多次测试,统计完成数据后,将实际数据与预期数据进行比较分析,判断是否达成目标,
5,描述下你是怎么理解IOPS,吞吐量,TPS,QPS的?
IOPS是数据库每秒读写次数的指标,反映的是数据传输的效果,吞吐量是指每秒的操作数,或者说业务数,体现的是系统的性能承载能力,TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
6,你是怎么理解软件的性能的?
软件的性能是一种非功能性的特性,它关注的不是软件是否能完成既定目标,而是在完成该功能的时候体现出的及时性,通过用户的主观感受来反映软件的性能.
作为测试人员,我更关注的是设计,合理的场景和测试用例来验证系统的资源数据 • 验证在高并发的情况下架构是否满足 • 给架构师以及开发人员提供中间件配置参数的合理值范围 • 使用技术手段监控系统,DB,中间件,全链路监控的方式来监控系统资源情况
标签:性能,时间,资源,测试,理论,服务端,内存 From: https://www.cnblogs.com/shang123/p/16592102.html