5.18-性能测试(一)
软件测试:功能、自动化(UI仅由代码来操作系统,无人工、API)、性能、安全(渗透测试)
性能测试学习章节:理论;方法;实战;代码级别性能测试;资源监控
一、测试理论
1.性能是衡量软件用户体验最核心的指标。
2.给用户最直观的体验是响应时间(速度快慢)和吞吐量(同时多少个用户可以访问这个系统)
如何查看响应时间
打开淘宝网右键检查,network清空数据并刷新页面 右下角红色load为响应时间(多少毫秒)
用户视角
1.软件性能是用户操作的响应时间。
2.响应时间:1-3秒网络速度优秀;3-5秒可以接受;5秒以上无法接受
如果测试一个页面响应时间大于5秒,需要反馈程序员并提交一个优化问题单
运维
1.维护和管理服务器并负责公司网络环境。阿里云、IBM的小型服务器
2.运维除关注响应时间外,也会关注更多底层的资源信息,资源信息如下: • 系统资源(CPU和内存)
CPU和内存(memory) 数据库(database,db)
• 数据库资源(IOPS资源)
存储数据,因此读写速度就非常重要。衡量读写速度指标是IOPS
• JVM内存是否够用
Java语言特点跨平台,Java通过jvm跨平台,Java 编写程序都有内存大小设置,如果程序超过内存大小设置,会出现内存泄露(Out Of Memory ,OOM)
• 系统的最大容量
开发
代码是由程序员写,因此开发会关注的更全面,总结如下: • 前后交互的响应时间 • 中间件的参数设置(rabbitMQ,redis,kafka)
Redis:缓存穿透。存到内存里,目的是查询时候读取速度很快
• 内存释放泄露 • 连接数泄露
数据库(DB):程序员需要连接到数据库查询数据。由于资源有限,如果之前占用的没释放,会导致后面的连接不上就会泄露
• 是否存在不合理的内存使用方式 • 是否存在不合理的线程同步方式 • 系统中是否存在不合理的资源竞争 • 系统架构&代码结构
单体(所有代码整合一起)
垂直(按照模块整合不同代码)
SOA(不同模块之间数据同步)
微服务(按照业务类型把每个业务写成一个服务。企业使用最多)
SAAS:Software As A Service 软件即服务
PAAS: Platform As A Service 平台即服务
测试
用户关注视角属于全栈性,测试需要考虑用户产品体验也要监控及关注运维和开发视角,性能测试工作职责为:
• 设计合理的场景和测试用例来验证系统的资源数据
• 验证在高并发情况下架构是否满足
• 给架构师以及开发人员提供中间件配置参数的合理值范围
• 使用技术手段监控系统,DB,中间件,全链路监控的方式来监控系统资源情况
WEB前端
前端性能是性能测试中比较热门的技术,具体关注的点:
• 浏览器资源加载(HTML解析,图片资源加载,CSS文件资源加载)
• 前端缓存技术的优化是否合理性
• 前端与后端的交互性耗时
响应时间
⼀次操作完成的时间,是客户端发送请求到服务端后,服务端返回到客户端的响应数据的时间。包含用于等待和服务的时间,以及用来返回结果的时间。
响应时间=网络时间+应用程序的处理时间
客户端<---》路由器(DNS)<---〉nginx中间件<--->淘宝服务<--->淘宝数据库
并发用户数
1.性能测试核心是验证当前系统能否支持现有用户的访问,系统可以承受在同一时间段多少用户访问系统。比如王者荣耀,是否可以承受同时在线一亿人同时进行玩游戏?
2.并发用户数,不论从业务视角出发,还是服务端承受压力,指同一时间同时向客户端发出请求的客户,也称为“并发测试”。是服务端承受的最大并发访问数。
吞吐量
用于数据传输,被测试系统的执行效率。⽤于描述数据传输速度(字节/秒或者⽐特/秒),如DB数据库,吞吐量指操作速度,每秒操作数或者每秒业务数或单位时间内客户端请求的数量,体现系统性能承载能力。
例如一码通:
性能计数器
性能测试过程中需要收集哪些数据,并且收集的这些数据对性能测试有帮助 系统:cpu memory db:iops
被测系统:响应时间,并发用户数,吞吐量
性能测试什么时候开始合适?
性能测试最好是在功能测试的基础上,系统测试完全OK再做性能测试
使用率
分两个维度:系统资源的使⽤率;系统内部署服务对系统资源的使⽤率
系统内部署服务,对系统资源的使⽤率对于服务所请求的资源,使⽤率指所给定的时间区间内资源的繁忙程度;对于存储资源来说,使⽤率指所消耗的存储容量
如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该业务形态,内存使⽤率从100M⼀直占⽤到3G,随着业务形态内存资源得到释放呈下降的趋势,内存使⽤率最⾼为75%,会存在OOM的错误信息和内存泄露的情况。
当系统的资源使用率(cpu和内存)达到60%以上,系统就会存在很卡的情况
思考时间
Think Time也称休眠时间,在业务视角指用户在进行操作时,每个请求之间的间隔时间。
IOPS 磁盘和数据库读写
主要针对数据库,指每秒发⽣的输⼊/输出操作的次数,是数据传输的⼀个度量⽅法。⽤于磁盘的读写,IOPS值的是每秒读和写的次数。
TPS/QPS
TPS:统计每秒处理的事务数。即系统每秒能够处理事务的数量
事务:一系列操作动作的组合。如登录,输入账户,输入密码,点击登录按钮
QPS:每秒查询率
资源调度
系统资源是有限的,假设所有程序都启动资源会不够,谁先抢到资源谁先执行,过程中资源会不停的切换。
在操作系统级别上,进程是操作系统最小的运行单位。什么是进程,进程是每个程序运行后,都是一个独立的进程。现在的软件都是可以同时干很多的事,比如抖音,可以同时看视频的同时也可以发私信,也可以聊天,这个过程中,发私信,聊天,看视频,都是由线程来支撑执行的,所以现在的软件是多线程的模式。
在进程角度,多线程内部都是共享数据的(如拿抖音看视频,聊天,发私信,其实是同一个人)。
调度策略:在资源有限的情况下,所有的任务都可以执行,如果不够的情况,就会有排队的机制。
排队的机制:
队列(数据结构),先进先出。
Queue:put():进队 get():出队 empty():队伍是否为空
CPU密集型
1.应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU ;
2.存在大量计算任务,占用大量CPU而占用少量内存;
IO密集型
1.应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源。系统的最⼩粒度是线程,系统调度中粒度最细的就是对线程的调度。
2.占用少量CPU占用大量内存
等待队列
在程序中都会涉及等待队列。同步交互和异步交互中,都会涉及它的最⼤队列,核心是防⽌在客户端⾼并发时及服务端在没有队列时,出现雪崩以及最终导致服务端出现瘫痪
服务端的稳定性测试怎么保障? 客户端在持续高并发的情况下发送请求给服务端,服务端处理能力有限,导致资源出现瓶颈的同时排队的任务越来越多,最后服务端就出现瘫痪。为了服务端不出现崩溃,服务端一般会使用队列的机制。例如:服务最多可以处理任务是30个,如果过来的任务是少于30个,则全部同时处理,如果过来的任务是100个,则70个任务在排队。
1、队列设置的值是多少?最⼤可以运⾏的任务是多少? 2、需要测试到排队的策略机制,模拟⼤批量的程序进⾏排队,⼀个任务执⾏结束后,队列位置释放 ⼀个,等待中的可以⽴刻进⼊并执⾏,这中间就设计到先进先出或先进后出,以及线程优先级的设计策略 3、线程在排队的过程中,设置最⼤的等待时间是多少,⼀个线程不可能永远处于等待中,等待多久还没到执⾏的阶段,这时服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时间 4、⼀个线程完整的时间是由三部分组成,响应时间:客户端发起请求时间+访问等待时间+逻辑执⾏时间 +返回给客户端的时间。在测试中,把每个线程名称设置为uuid,这样它都是独⽴的,可以依据这个 uuid,让开发配合输出每个阶段的时间输出,就可以得到每个阶段的具体时间,根据时间再来判断时间是否优化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)