08-01 Jmeter 核心原理与性能测试理论
Jmeter 核心原理
基于协议,模拟真实用户场景,并通过多线程模拟用户发起请求。
- 基于协议:性能测试的对象是网络分布式架构的软件,而网络分布式架构的核心是网络协议
- 多线程:人的大脑是单线程的,电脑的 cpu 是多线程的。性能测试就是利用多 线程的技术模拟多用户去负载
- 模拟真实场景。用户的访问时间,访问频率都不是固定的
性能测试理论
性能测试的
- 基本目标:测试系统性能是否达标;通过一定的技术手段,模拟用户的并发请求,去测试系统最大处理能力与稳定运行的能力,找到性能瓶颈,提升系统整体处理能力
- 基本方法:基准、负载、压力……
核心原理
基于协议,通过多线程的方式模拟用户并发,在不同场景下施压服务器
- 基于协议:包括http,https,tcp,udp,socket,websocket,基于协议发起请求
- 多线程:通过多线程的方式,模拟并发用户,施压服务器
- 涉及场景:jmeter 方法,元件;设计用户使用系统的关联,思考时间,集合点,对结果进行断言
应用领域
能力验证:系统能否在固定条件下具有所声明的能力
乙方向甲方提供的项目中,声明了系统可以支持5000用户同时登录,且响应时间不超过3s;乙方需要通过性能测试得到测试结果,给予甲方验收报告
瓶颈发现:发现瓶颈与缺陷,无可参照的性能指标与目标
通过一系列的性能测试手段,发现性能瓶颈与缺陷
性能调优:对系统性能的调优
针对发现的性能瓶颈做调优
- TPS 瓶颈
- 服务资源瓶颈
- 响应时间瓶颈
- SQL 瓶颈
- 容量规划:系统能否支持未来一段时间内的用户增长
当前用户可能只支持5000用户并发;
预计未来用户并发量能达到 50000 or 500000;
针对未来可能存在的业务量爆发,以预计的用户并发量为基数,做对应的性能测试,提前调整硬件设施
测试思路
- 要测什么?
前端:web、APP;从用户角度考虑,更多关注页面加载时间,与响应时间
服务端:
- 工具层面:关注错误率与吞吐量
- 服务器层面:CPU,内存,IO,JVM
数据库:包括慢SQL,死锁……
- 怎么测?
需求--计划--方案--测试环境搭建--设计用例--数据准备--设计场景--脚本开发--数据监控--结果分析--性能调优--提交报告
- 测试结果通过的标准:
按照需求:测试结果符合预期
无标准需求的:例如测试一个页面的最大并发
性能指标
- 前端性能指标
响应时间:用户视角最优先关注的指标
258原则:
- 2s以内,很满意
- 5s,一般
- 8s,无法接受
前端相应时间:
- 前端资源加载渲染的时间
- 前后端交互的时间
- 前端将后端查询的数据,在页面呈现出来
网络连接时间:
- connect time-连接时间:请求发出到服务端接收到,中间的网络时间
- latency-延迟:网络连接时间+服务处理返回的时间
- 服务段处理时间=latency - connect time
错误率
点击率(HPS):用户点击按钮,触发请求
TPS:
- 单接口业务:单位时间完成的请求数
- 多接口业务:单位时间完成的事务数
RPS:直接从服务端角度衡量压力值
- 单位时间发起的请求数
TPS 衡量了服务端/系统的性能;RPS 衡量了压力
- 服务端性能指标
CPU
内存
磁盘IO
JVM
中间件:Tomcat、redis、Nginx
测试视角
用户视角
- 响应时间
- 系统稳定
运维视角
- 硬件设施是否需要更换
资源利用率是否达标
- 利用率超标
- 利用率过低
- 系统容量
开发视角
- 代码是否需要优化
- SQL 优化
- 系统架构优化
性能测试工程师的视角
测试类型
基准测试:每一次版本迭代都需要做基准测试,目的是对比上一次的测试结果,给出调优的依据
负载测试:持续不断地增加压力;需要保证压力的持续性;找到系统的瓶颈点
- 并发用户模型:持续不断地增加并发用户
- RPS模型:持续不断地增加请求数
压力测试:当资源处于一个饱和状态,持续运行服务,考察系统的稳定性;或者负载处于一个高峰
- 稳定性测试:最大压力的80%,持续运行一段时间
- 破坏性测试:在最大压力的基础上,依然不断增加压力,目的是让系统崩溃报错
失效恢复测试:系统异常之后,能否及时地恢复
容量测试:考察系统在未来时间段内,能支撑的用户数;测试大容量下,系统需要的硬件设施
机智的测试生活
双非大龄青年,转行测试工程师。 分享测试工程师的职业经验, 提供付费转行咨询
推荐阅读
转正实录|陪你走一段路
转行的第一喜事,当然是收到Offer啦~拿到Offer的那一天,我松了一口气,算是实现了一个小目标。但我又意识到,接下来,游戏要升级了,即将要面临试用期的考验。
机智的测试生活阅读 491
一文教会你mock(Mockito和PowerMock双剑合璧)
Mock有模仿、伪造的含义。Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。mock工具使用范畴:
京东云开发者赞 2阅读 396评论 1
源码学习之 Spring 容器创建原理
众所周知,Spring可以帮我们管理我们需要的bean。在我们需要用到这些bean的时候,可以很方便的获取到它,然后进行一系列的操作。比如,我们定义一个bean MyTestBean。
京东云开发者赞 3阅读 470
测试自动化中遵循的最佳实践
现在的企业从以往一年、一个月、一周交付,逐渐转变为开始关注两到三天甚至一天内交付。软件自动化测试的出现及其与手动测试的结合使得这种时长的交付成为可能。
陈琦赞 3阅读 524评论 1
一个漏测Bug能让你想到多少?
漏测Bug是指产品逻辑缺陷在测试过程中没有被发现(尤其是测试环境可以重现的缺陷),上线版本发布后或者在用户使用体验后发现并反馈回来的缺陷。可能造成线上故障或者资损,在对产品测试过程中,自己也难免出现一...
得物技术阅读 998评论 1
重写 Nacos 服务发现:多个服务器如何跨命名空间,访问公共服务?
这就意味着只需部署一个应用,就能满足所有测试环境的需求;也意味着所有测试环境都需要调用该公共应用,而不同测试环境的应用注册在不同的 Nacos 命名空间。
LigaAI阅读 647
结合 API & DaaS,让使用数据更方便
Eotalk 是由 Eolink CEO 刘昊臻发起的泛技术聊天活动,每期都会邀请一些技术圈内的大牛聊聊天,聊些关于技术、创业工作、投融资等热点话题。
Eolink阅读 609
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。