避开这12个压测误区保证有效压测

news2024/10/6 20:37:40

压测本质上其实就是经验的问题,至于技术我认为现在都是配套了,也有人配套的东西也搞不清,那还是经验的问题。提醒下,这篇对野路子玩压测的人蛮有用的。

一、压测的误区

首先讲压测误区,每个误区我会简单的总结下,对于需要拓展的,我会在第二部分如何有效压测中去具体描述。

误区1:性能测试就是从写脚本开始

最重要的是你能搞清楚为什么要压测,你这次的压测目的以及压测场景;写脚本只是你认为的第一步,因为你其他所谓性能的需求分析没有思路或者也不清楚。直接写脚本并不是最科学的一步。

误区2:性能测试必须在功能测试之后

这是瀑布思维,大家都在聊测试左移,为什么性能测试不能左移呢?

单元级的性能测试也是可以的,比如在方法层注入Benchmark(Benchmark 是一个支持功能标杆管理的库,类似于单元测试),一般公司没有时间做单元级的,在接口现先行的情况下,可以先完成接口的基准性能测试。

误区3:性能测试要像功能测试一样覆盖更多的场景

性能测试更看重用户访问模型去筛选,做到有的放矢,并不是像功能一样全覆盖。不过目前行业都在推业务稳定性测试,在时间和资源允许的情况下,多场景覆盖也是有很大的作用。还是建议两者区分,做到核心目的快速实现。

误区4:提升硬件就能提升系统性能

对于造成性能瓶颈的原因很多,硬件这是其中一项,不加判断说通过加硬件提升性能可以说是技术门外汉。提升硬件性能并不一定能提升系统性能,比如你死锁了,死循环了,加硬件没用。

误区5:不切实际的性能指标

往往业务动辄给出百万并发这些词,这些实际上是需要去转化可测的性能测试指标。有些同学不了解转化过程,直接拿业务说的并发数去对比压测工具中的线程数

误区6:线下压测没有意义

这个蛮典型的,一部分同学在线下压测的结果比较差,去找开发,往往被开发打回,你的压测环境根线上相比差异太大,结果没意义。这个话表面上看是成立的,但其实这是在偷换概念,线下压测的目的并不是去对比线上的实际值,而是通过线下压测去发现基本性能问题,如慢方法、索引问题、死锁等。所以要有自己的独立思考,不要被开发带偏。

误区7:脚本里存在大量的逻辑

核心逻辑完成即可。如if判断,通过逻辑插件很浪费性能,适得其反。

误区8:不参数化也能跑,就不用参数化

脚本能跑,但是场景不真实。能跑,返回200,只是你看的是皮子,皮子是一样的,里子不一样。压测数据不参数化,大量走缓存,和真实场景未必符合,这是里子。

误区9:脚本不加检查点或者过多检查点

脚本不加检查点可能会导致性能压测中业务偏离。检查点过度会导致性能浪费,尤其是不能一边压测一边连接数据库做查询验证。

误区10:脚本一定要加集合点吗?

搞清楚性能测试的访问模型,对于秒杀等场景可以添加集合点,验证超卖。对于一些预售类,查询类并不一定,要根据实际需求来。

误区11:瓶颈诊断先从服务端开始

排查压测瓶颈首先确定自身发压没有瓶颈,包括压力发起的环境。如:

  • 你自己的笔记本?
  • 你传递压力的带宽,办公室公用网络?

误区12 :一定要做性能测试才能发现性能问题?

这是个经验问题,并不需要一定做性能测试才能发现性能问题,比如:接口单次调用过慢,可以trace;比如发现索引未添加,可以做执行计划。

二、如何有效压测?

充分的需求调研,需求调研的科学准确性决定是否能有效压测,核心的包括目标制定,业务梳理,测试数据梳理,系统部署结构以及监控等。

1、目标制定以及业务规则梳理

① 目标制定

衡量性能最重要的三个指标是TPS、响应时间、报错率。那如何制定性能测试的指标呢?你的依据是什么呢?我列举几个常见的误区答案:

  • 我是根据二八原则,老板说我们百万日活,80% 的用户在 20% 的时间段里访问,响应时间是根据业内的 2-5-8 来制定;
  • 我是根据竞品数据分析,他们产品的 PV 应该是百万级,所以我们的产品也是这么制定的;
  • 这个指标是业务定的,他们和开发讨论过,应该没什么问题。

以上回答不仅从道理上讲有些牵强,而且也没有任何制定性能测试可以参考的有效信息。性能测试是一项非常严谨的工作,通过间接或者普适规则不可能满足具体特定的分析,所以对这个问题的理解基本可以判断一位同学是否真正做过性能测试。

对于每一个接口都会有访问计数,这是目前业内比较常见的,也是衡量接口访问能力最准确的指标之一。一般大公司会自己开发相应的监控工具,发展中的公司也会使用一些开源或者商业工具进行监控。比如从ELK就可以提取这些数据,通过实际访问的频次去指定目标Tps。

② 业务规则的调研

对于性能测试而言,业务规则的了解也是不可或缺的。一些公司的性能测试组在进行压测时,业务线的测试也需要协助支持压测的进行,由此可以体现业务的重要性。

对业务的充分了解不仅可以帮助你提高写脚本的效率,也可以帮助你构造更为真实的性能测试场景。举个简单的例子,你模拟下单的时候是否考虑商品属性会员属性等,比如是单一商品还是套餐商品,下单的时候购物车里有几件商品,通过不同条件的组合,这些都会影响性能测试的结果。这一部分很重要,比如你测试过促销,有可能功能的组合会产生上千条case,活动会触发很多规则,如果你只走一个简单的流程,逻辑复杂度根本不是一回事,性能差异会跟真实的逻辑差别很大,而交易又作为最核心的链路,如果出了问题,这锅挺大的,这一块需要好好思考。

2、部署架构调研

被测的业务部署架构是什么意思呢,简单来说就是 被测服务涉及哪些组件,每个组件部署在哪些服务器上,服务器的配置是怎样的?你需要画一个部署架构示意图,有了这张图,才能知道如何做到全貌监控,以及遇到问题从哪些服务入手。

我用一个自己画的架构示意图来说明这个问题,如下图所示,这是一个经典的链路:从客户端发起到服务端,服务端从代理层到应用层,最后到数据层。需要注意的是,你需要明确被测的环境里的各个服务有多少节点,比如客户层的压测机节点有几台,分别在哪个网段。同理我们可以去调研服务层和数据层的节点。

而且现在都是云服务,会做到弹性扩容,不同的时间节点会有不同的实例节点,这些都应当做好记录。

3、对测试数据进行调研

关于测试数据调研,包含了非常多的内容,对于业务测试来说数据调研就是获取必要的参数来满足既定的场景可以跑通。那对于性能测试来说,需要做哪些方面的数据调研呢,我带你一一解读。

① 数据库基础数据量分析

数据库的基础数据量就是目前线上数据库实际的数据量,为什么要统计基础数据量呢?很多公司往往有独立的性能测试环境,但是数据库的数据量与线上相比差距较大,可能出现一条 SQL 在性能测试环境执行很快,但上了生产却会很慢的问题。这就导致测试觉得该测的都测了,但上了生产还是会有问题出现。

这种问题可能会因为索引缺失以及性能环境数据量较少而不能将问题暴露出来,所以在 性能测试环境下的数据量一定要和生产上一致。为了达到这个目的,有的公司可以将生产数据脱敏后备份,有的则需要你自己写脚本来根据业务规则批量造数据。

② 压测增量数据分析

除了数据库的基础数据量,我们也需要考虑一轮性能测试下来会增加多少数据量。往往增加的数据量最终落到数据库,可能会经过各种中间件如 Redis、Mq 等,所以涉及的链路可能存在数据量的激增,所以这方面需要根据增加情况制定相应的兜底方案(即 最差情况下的临时解决办法)。

③ 冷热数据的分析

以我的从业经历来讲,能够在方案阶段考虑到冷热数据分布的公司并不多,往往都是从性能测试结果的一些异常点或者实际产线出现的问题去追溯。接下来我就带你了解下什么是冷热数据,以及如果不对其进行分析可能会带来什么影响。

  • 冷数据,是指没有经常被访问的数据,通常情况下将其存放到数据库中,读写效率相对较低。
  • 热数据,是经常被用户访问的数据,一般会放在缓存中。

在性能测试的过程中,被频繁访问的冷数据会转变为热数据。如果参数化数据量比较少,持续压测会让 TPS 越来越高。而在实际大促情况下,往往有千万级的用户直接访问,但大多都是冷数据,会存在处理能力还没达到压测结果的指标,系统就出现问题的情况。所以在需求调研时,你也需要考虑:数据会不会被缓存,缓存时间多久的问题?

4、测试监控

为什么监控很重要,它是发现问题的眼睛,而且一旦在过程中没有及时监控和发现,还原现场是有难度的。不仅需要罗列清楚你所需要的监控工具和访问方式,同时也需要层次分明地传递你监控的内容。对我来说做监第一个关键词:

怎么去理解“全”呢?先举一个典型的例子,有时候做一个新的项目,询问支持的同学有没有部署监控,他们说已经部署了,但等你真正使用的时候发现只监控了一台应用服务器的 CPU。这个例子我相信大多数人都似曾相识,所以我说的全,至少包含两个方面:

  • 涉及所有服务器;
  • 涉及服务器基础监控,包括 CPU、磁盘、内存、网络等。

第二是分层,不仅仅硬件相关的,还有链路相关的,都要监控,工具如skywalking,pinpoint等。来一张我以前PPT用过的大图,具体怎么玩都配套了。

如上图所示,监控的内容很多。

监控还有个很重要的点是设置阈值来报警,无论是线上和线下的性能测试,报警功能都是必需的。因为通过人工的观察,往往不能以最快的速度发现问题。一旦能够及时报警,涉及的人员就可以快速响应,尽可能降低风险。

 正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配

正在成为组织运营标配的流程挖掘,到底有哪些商业价值? 作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配 文/王吉伟 AIGC正在影响越来越多的行业,流程挖掘领域亦不例外。 Mindzie首先宣布集成生成式AI,使用户…

带你详细了解Redis事务锁机制-加实列演示-上

Redis_事务_锁机制_秒杀 Redis 的事务是什么? 1、Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行 2、事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 3、Redis 事务的主要作用就是串联多个命令防止别的命令…

怎么学习和提升前端开发的能力? - 易智编译EaseEditing

要学习和提升前端开发的能力,您可以按照以下步骤进行: 掌握基础知识: 了解HTML、CSS和JavaScript的基本概念和语法。学习HTML用于创建网页结构,CSS用于样式设计和布局,JavaScript用于交互和动态效果。 学习框架和库&…

探讨太阳能热水器的安全隐患和雷电防护措施

太阳能热水器是指利用太阳光加热原理来获得热水的装置。随着科学技术的发展,太阳能热水器因其新颖、环保、节能且方便而深受消费者的喜爱,安装数量逐年增加。我国太阳能资源丰富,尤其是在广袤的西部中小城镇、农村地区,家家户户几…

NSSA实验和配置命令

1)拓扑 需求 2)需求:PC2和PC5互通 配置思路和配置命令 3)配置思路: 第一步:先让R1能够和PC5互通,要先配置静态路由 [R1] ip route-static 192.168.4.0 24 192.168.18.8 第二步:在R8上写去往PC1/PC2的路…

定长图文验证码模型训练

文章目录 自定义数据集生成模型代码计算均值和标准差训练代码测试集成功率计算推理测试 市面上常见的验证码识别方案包括: 基于规则的方案:这种识别方案针对一些特定类型的验证码(如数字、字母组合),利用编写规则的方式…

逛开发者集市啦,ShardingSphere 在亚马逊云科技中国峰会等你!

2023亚马逊云科技中国峰会将于6月27日-28日在上海世博中心盛大开幕。本次峰会以“共见价值成就”为主题,与合作伙伴展望云计算趋势及合作发展战略,分享行业解决方案,共同探讨协同销售策略和全新的 APN 计划,助力合作伙伴成就更多价…

计算机系统层次结构与操作系统和驱动的定义

一、程序分类 程序按其运行环境分为: 裸机程序:直接运行在对应硬件上的程序 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 计算机系统两种层次结构: 2.1 无操作系统的简单的两层结构 2.2 有操作系统的…

华为云物联网平台微信小程序开发教程2.0【完整详细教程】

一、简介 在之前曾发布过一篇文章“华为云物联网平台的微信小程序开发”,在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题,在重新查看上面的文章教程时发现教程内容的步骤不详细,现对教…

Postman快速入门(一)

一、基本介绍 postman是一款流程的接口调试工具,其特点就是使用简单,功能强大。使用角色也非常广泛,后端开发,前端人员,测试人员都可以使用它进行接口调试或测试。 下图是基本功能介绍 发送第一个请求 如果你是第一次…

人工智能如何彻底改变 SaaS 格局

人工智能 (AI) 正在颠覆几乎所有行业,并正在改变我们开展业务的方式。近年来,SaaS 行业一直是受影响最大的行业之一,人工智能在其指数级增长中发挥着至关重要的作用。在本文中,我们将详细讨论实施 AI 对 SaaS 产品的增长和开发有何…

C++拷贝构造函数

文章目录 拷贝构造函数是一个c的默认成员函数,它是用来拷贝对象的,当你想修改对象,但是又不想修改它本身,那么可以将其拷贝给一个对象对这个拷贝出来的对象进行操作 拷贝构造函数语法:类名(const 类名&…

Java-API简析_java.util.StringTokenizer类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131293596 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

设计模式之——单例模式

✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击学习更多 🌐关键:JavaScript 单例 设计模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问…

【操作系统】程序运行环境

目录 1.处理器运行模式 1.1特权指令 1.2非特权指令 2.中断和异常的概念 2.1中断和异常的定义 2.1.1外中断 2.1.2内中断(异常) 2.2中断和异常的处理过程 3.系统调用 1.处理器运行模式 计算机系统中,通常 CPU 执行两种不同性质的程序:一…

【Android开发基础】手机传感器信息的获取

文章目录 一、引言二、了解1、概述2、关键 三、设计1、UI设计(1)主界面(2)适配器item 2、编码(1)获取数据(传感器信息)(2)渲染数据(初始化适配器&…

SpringBoot不在使用@Validated 做参数校验但是不想在Controller层怎么办?

目录 场景再现: 怎么做? 遇到了什么问题? 怎么实现? 场景再现: 某API接口接受加密的json字符串,接受字符串之后先进行解密处理,解密完成之后还要进行参数校验处理,如果参数不合规…

华为HCIA备考(数通) 易错题整理 PART1

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…

2023亚马逊云科技中国峰会:强化学习探索—— Amazon DeepRacer

1️⃣前言 Amazon DeepRacer 是一个综合性的学习系统,可供各个水平的用户用来学习和探索强化学习以及试验和构建自动驾驶应用程序。 2️⃣Amazon DeepRacer 介绍 DeepRacer是一款小型自主驾驶车辆,它结合了深度学习、强化学习和云计算等技术&#xff0c…

Karl Guttag评Vision Pro(二):这些硬件问题不容忽视

上周,AR/VR光学专家Karl Guttag从价格、VST透视、应用、交互等方面,将Vision Pro与Quest Pro进行对比,发现Vision Pro在设计上做出更多正确决策。尽管如此,Guttag认为该头显本身在硬件部分,依然存在一些不易发现的问题…