构建性能测试知识体系

news/2024/5/15 4:24:36/文章来源:https://www.cnblogs.com/ceshi2016/p/16803632.html

转载:https://mp.weixin.qq.com/s?__biz=MzkwNTI2NjAxMA==&mid=2247484048&idx=1&sn=6700370d90c5c5ceae2729297f6e8ef4&chksm=c0fb14a5f78c9db3ae1bd31e50a1253a95d2a97ae1888ee22025d0c5bed4bd86a63599dd36cb&scene=178&cur_album_id=2331539939861282817#rd

话接上回(我眼中的性能测试),聊了个人对性能测试的一些看法。后来在直播间和老张,CC一起聊了如何构建个人的性能知识体系这个话题,本文做个总结,个人觉得这个话题非常有意义。单纯的碎片化知识很难产生效应,应该学会如何把这些零散知识点串联起来,形成自己的知识体系,才能更好地运用。那么,如何构建自己的性能知识体系呢?

1. 理解名词背后的原理

在性能测试领域,有很多名词(缩略词),像TPS、响应时间、并发数、线程数等等。不同人眼中对于这些名词的定义并不一样。比如开发看中的可能是线程数(服务端),产品希望得到的是并发数(用户侧),但这二者并不是等同的。还有,TPS和QPS虽然在某些场景下是等同的,但更多时候又不是等同的,因为现在的事务更加复杂,一个T(事务)往往需要多次的Q(查询)来完成。(参考:TPS、并发数与线程数,傻傻分不清楚?)

所以,团队成员在沟通对话在时,需要先拉同对齐对这些概念,确保大家说的是同一个问题,避免陷入无休止的争论,但其实说得都不是同一件事。

2. 理解压力是怎么生成的

这是做性能测试的第一步,也是最重要的一步。如果我们不能很好的梳理被测系统的生产压力来自哪些功能,那么就会出现用登录场景来评估系统性能的尴尬局面了。在这个知识领域,我们需要弄清楚三个模型:业务模型、数据模型及流量模型。

业务模型:决定了我们要测试哪些场景。因为被测系统的功能那么多,不可能所有的功能点都需要做性能测试(虽然理论上是都要测试,但是成本太高,并不现实),那么如何选择就是个难点。如何做选择呢,笔者简单列了个导图,具体的就不展开了。

数据模型:在性能测试开始前,我们需要做哪些铺底数据?做多少?这个是需要我们提前规划好的。因为不管是哪类数据库,对于不同体量的数据,所走的查询器选择都是不一样的。几百行的数据走全表扫描肯定比走索引要好,但如果是几百万行呢?这方便需要我们具体地做评估。还要注意的是,为什么我们需要做参数化呢?参数哪些数据?这也是数据模型中要考虑的事。同样的,列个导图,仅供参考

流量模型:主要指的是每个功能点或者子系统的流量转化率,需要结合我们的业务模型来共同管理,例如,对于秒杀或者整点活动类的场景,流量模型就要特别关注并发的线程数,需要结合用户量来做参考。而对于流程比较长的业务,每个节点都会有流量流失(并不是所有的场景,用户都会从头走到尾),那么这个百分比如何控制,需要结合历史数据,和产品共同来制定。这个强依赖场景,所以就不列导图了。

有了这三个模型之后,剩下的就是性能测试脚本的编写和测试执行了。当下很多学性能测试同伴,把更多的精力投入到性能测试工具的学习中,虽然不能说不对,但这仅仅是性能测试的一部分,而且还需要根据实际情况针对性地做选型(虽然Jmeter能解决大部分的问题),代码能力,是做性能测试必备的条件哟。

3. 被测系统是如何搭建的

当我们对某个系统做性能测试时,一定要对这个系统架构要有整体的认知,知道被测系统是如何运转起来的,你在做压测和监控时,才能游刃有余。最常见的两种表达系统架构的图是技术架构图和物理拓扑图。

技术架构图:这个是希望所有测试人员都要能够画出来的,不论你是做业务测试还是测试开发。当只有你能完整地图出你所测试系统的技术架构时,你才能知道系统到底用到了哪些技术组件,这些组件是如何通信的。只有这样,你才能更有针对性地设计你的测试用例和场景,覆盖到一些组件常见的性能问题。如果你能自己画出自己测试系统的技术架构来,才能说明你对这个系统真的熟悉。

物理拓扑图:这个一般是运维同学关注的,现在多数的CMDB系统都可以直接拉出对应的图形,这个有助于在性能测试的过程中更好的设置监控项,以便于更好的发现资源性能问题。

4. 应用如何监控

在做性能测试时,我们不能只关注业务层的数据(TPS、响应时间、正确率、稳定性等),还需要我们关注一些技术指标(JVM、线程数、缓存、连接数及各类中间件的配置指标)及系统资源(CPU、内存、IO)。这些指标不能只靠人眼去观察,需要有一整套的监控体系来协助你。

业内常见的Zabbix、Glances、Prometheus+Grafana 等都是可视化监控常用的手段,对于代码层的链路追踪,常用的有SkyWalking、PinPoint等等。当然,这些监控工具都离不开最基础的命令监控,类似于TOP、IOSTAT、JSTACK等命令,能够快速帮助我们定位和发现问题。建议大家熟练使用一些常用命令,因为有时候生产环境并不会让你安装那么多监控工具。

现在,更多的服务部署在云上,或者容器中,给监控带来了更多的挑战,这些新技术的出现,希望我们也要与时俱进,掌握监控它们的方案。

5. 如何定位及排错

性能测试一定不会是一帆风顺的,在测试过程中,我们会遇到各类问题,那么如何定位那些问题呢。我们至少需要做到以下几点:

了解计算机的基本原理:比如CPU是如何工作的,为什么需要内存,什么情况下说明内存是不够用了(需要了解Linux与Windows对于内存管理的机制异同点)?为什么会流行一句话“一切性能问题皆IO”?只有当我们了计算机的基本原理后,我们才能有方向。

理解技术实现的原理:比如在数据库层,为什么索引会更高效?它的弊端又是什么?为什么研发要引入Redis,它的好处是什么?如何理解Redis的透传与雪蹦现象,等等类似的问题,我们需要理解很多中间件的实现细节。这些你不一定需要自己全懂,但至少要有个映像,能够和开发进行更多的沟通,而不仅仅是报一些监控数据。

验证你的猜想:这一点其实非常的重要。在性能测试的过程中,我们遇到的问题往往是综合因素共同作用产生的,这就需要我们要有一定的猜想能力,依据自己或者团队的验证,猜想可能是什么问题,但不能仅停留在猜想上,需要我们有验证的能力,否则就是瞎猜,不足为凭。(参考数据什么会走丢了呢?)

6. 性能测试实践

“纸上学终觉浅,绝知此事要躬行”,道理懂得再多,也需要有实践的机会。性能测试是非常考验测试人员的个人经验。需要在不断的实践中成长。很多人可能会抱怨没有实践的机会,因为公司并没有提供相应的机会。个人的观点是,你日常的被测系统,其实就是最好的联系对象,尝试去理解那些技术组件,自己动手搭建一套玩玩。在夜深人静的时候,写写脚本去压一压,和运维搞好关系,要点监控的权限,都是可行的方案。因为,当初的我,就这么练习过来的。只有你做出成绩了,团队才会重视,才有可能给出对应的资源,让你去成长。

7. CC的观点总结

关于如何构建知识体系,CC 也给出了自己的一些看法

性能测试的工具原理与使用。

性能测试目标与场景分析。

如何制定性能测试指标;参考数据有哪些,怎么获取;常见的性能测试场景有哪些,如何通过这些场景来提高性能测试的覆盖率,等等。这些都是性能测试方案的组成部分,只有制定了正确的性能测试方案才能做出有效的性能测试。

分层监控体系建设:重点是监控和问题定位,包括如何做硬件监控、系统链路监控,如何打造可视化的监控报表。监控是性能测试必要的步骤,是你发现性能问题的“眼睛”。

性能分析优化实践:如何从服务端、中间件、数据层三个角度了解如何定位和优化问题,如何结合自身工作场景进行性能调优。

来源于:直播回放:构建可落地的企业级压测体系

8. 老张的观点

理论:需要有扎实的性能理论支持,团队一起构建同频的交流环境;

工具:光有理论,如果无法生成压力(先不论压力生成是否符合业务要求),也是无法开展工作的。所以,对于测试工具,必须有一个擅长的,能够懂得它的实现原理,能进行必要的二次开发或者高阶使用。

方法:就是上面提到的三个模型,通过正确的方法,结合工具的使用,达到做性能测试的必要条件。

实践:实践是最好的老师,通过实践,积累经验。

经验:定期回顾+复盘,总结经验,不能让同样的错误重复发生。

9. 小结

通过对性能测试知识体系的整体介绍,让读者对于性能测试有更直观地了解。在上面的小点中,抛出了很多问题,没有给出答案,是因为文章篇幅有限,本文旨在帮助大家构建一个性能知识的框架,然后大家可以根据自己已有的知识点,对应的填充到这个架构中,形成有机的整体,查缺补漏。只有网状的体系化知识,才能让你在工作中应用自如。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_25423.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《对线面试官》| 高频 Redis 面试题(上)

目录前言百分之99面试官都爱问的 Redis 面试题1、谈下你对 Redis 的了解2、Redis适用于哪些场景?不适用于哪些场景?3、Redis 支持的数据类型有哪些?4、既然Redis是单线程架构,但为什么这么快?5、什么是缓存穿透&#x…

星巴克急了,瑞幸就稳了?

(图片来源于网络,侵删) 文|螳螂观察 作者|易不二 新消费下行,但咖啡赛道却异常拥堵。 Manner正在不亦乐乎玩联名、Tims中国进入上市倒计时、茶颜悦色挤进了咖啡市场、幸运咖开始反攻一线...... 跨界的玩家们就更是从四面八方…

【Shell篇三】Shell数组

文章目录一、Shell数组的定义二、Shell数组的常用操作三、Shell数组的增删改查四、Shell数组的遍历一、Shell数组的定义 Bash Shell只支持一维数组定义时使用圆括号,元素用空格分开初始化数组时不需要定义数组的大小 eg: array(A 1 B "C" 3) array2()也…

voron 2.4 皮带张紧度调节

相关视频 【浅谈一下Voron2.4打印机,让入门者有个清晰的定位和了解】https://www.bilibili.com/video/BV1KL4y1N76C?share_source=copy_web&vd_source=4df36574d866076e5078105782af91de Z轴AB轴

(01)ORB-SLAM2源码无死角解析-(64) BA优化(g2o)→闭环线程:Optimizer::OptimizeSim3→Sim3变换优化

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析-接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/123092196 文末正…

白名单里的蓝桥杯“计算思维”竞赛到底考啥,有啥用处?

可能很多人都已经知道了,教育部公布的《2022-2025学年面向中小学生的全国性竞赛活动名单》正式宣告了,蓝桥杯全国软件和信息技术专业人才大赛成为了白名单比赛中的一员了。 而根据蓝桥杯的竞赛说明,2023年4月15~16日,以及4月22~2…

微信对接百度实现文字识别OCR

微信对接百度实现文字识别OCR 前置基础条件: ①注册测试账号 ②开通自己的测试公众号 ③完成与微信互发消息 ④完成自定义菜单栏 详细步骤:https://blog.csdn.net/weixin_45565886/category_12059118.html 1 获取到百度文字识别API ①注册百度智能云账…

Tomcat修改端口、添加域名访问

一、修改改端口 1、修改默认访问端口8080,改为80 # vim /usr/local/tomcat/conf/server.xml (路径是自己的安装目录)<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=&…

spring 原理解析

spring 要解决的问题 1.spring 是如何创建一个bean对象的 bean对象其实就是一个实例 无非通过一些当时来丰富这个对象的内容 典型的就是aop和依赖注入 spring在通过构造方法创建一个实例对象后 就进入一个aop的阶段&#xff0c;这个阶段来实现属性 参数的依赖注入&#xf…

自然资源部第三地理信息制图院与Bigemap强强联手,共同推动多元化新GIS应用

近日&#xff0c;成都比格图数据处理有限公司(以下简称&#xff1a;Bigemap)与自然资源部第三地理信息制图院正式达成战略合作&#xff0c;未来双方将共同推动"基于矢量、影像、地形、实景三维等GIS数据在行业上的深化应用及国产化替代"合作。 自然资源部第三地理信…

小程序技术可助力智慧医疗企业破茧突围?

智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来爆发期。智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来…

基于java的果蔬在线销售系统/农产品销售系统

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

8-3 通过Grafana展示Prometheus的Node和Pod数据

文章目录前言Node数据node-exporter指标数据Prometheus采集node-exporter数据Grafana展示node-exporter数据导入模板Pod数据cadvisor指标数据Prometheus采集cadvisor数据Grafana展示cadvisor数据导入模板修改名字前言 在上一章节 8-2 通过Node-Exporter和Cadvisor收集指标数据…

多种点击试剂PEG:DBCO-PEG24-Maleimide, DBCO-PEG12-Mal性质总结

●中文名&#xff1a;二苯并环辛炔-PEG24-马来酰亚胺、二苯并环辛炔-二十四聚乙二醇-马来酰亚胺 ●英文&#xff1a;DBCO-PEG24-Maleimide&#xff0c;DBCO-PEG24-Mal ●外观以及性质&#xff1a;浅黄色或无色油性&#xff0c;西安凯新生物科技有限公司供应的​DBCO系列产品包…

MybatisPlus二级缓存不失效原因(缓存与数据库不一致)

​&#x1f4d2;个人主页&#xff1a;热爱生活的李&#x1f4d2; ​❤️感谢大家阅读本文&#xff0c;同时欢迎访问本人主页查看更多文章​❤️ &#x1f62d;技术太菜了希望下次不要出现了&#x1f62d; &#x1f64f;本人也在学习阶段&#xff0c;如若发现问题&#xff0c;请…

idea中的翻译插件(Translation)出现TKK不可用

idea中的翻译插件&#xff08;Translation&#xff09;不可用 1、问题&#xff1a; 在使用idea中的翻译插件时出现了下面的错误 2、解决方案 2-1、可以选择除谷歌外的 其他三个翻译软件 注意&#xff1a;我 试了一下 有道的 &#xff0c;申请了一个发现&#xff0c;这个并…

透明Png黑白图片上色(重新着色、改变成指定颜色)

场景&#xff1a;有时&#xff0c;我们需要给透明Png黑白图片改变成指定颜色&#xff08;上色&#xff09;。 前提&#xff1a;我们已经做好了带透明通道的PNG图片。 益处&#xff1a;使用此方法&#xff0c;只需要制作一张透明的黑色PNG图片即可&#xff0c;我们需要不同颜色…

UnRaid设备共用其他UnRaid主UPS的详细设置方法

系列文章目录 UnRaid系统添加UPS功能系列文章 第一篇&#xff1a;UnRaid主机连接UPS的设置方法简介 第二篇&#xff1a;UnRaid设备共用其他UnRaid主UPS的详细设置方法&#xff08;本文&#xff09; 第三篇&#xff1a;UnRaid设备共用群晖UPS的详细设置方法 文章目录系列文章目录…

Flutter基础组件:开关、进度组件、图片组件、图标组件

前言 刚开始学习&#xff0c;主要是为了熟悉一下组件的基本用法。参考 Flutter | 老孟 开关 Switch Switch(value: isOpen,onChanged: (value) {setState(() {isOpen value;});})添加图片 Switch(value: isOpen,activeThumbImage: const AssetImage(lib/assets/img/qq.png…

【无人机】基于EKF、UKF、PF、改进PF滤波算法的无人机航迹预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…