我们聊聊性能测试的理解误区

news2024/11/18 14:01:58

有同学私信我,和他聊了聊关于性能测试的一些话题,发现他对性能测试的理解走入了一些误区。

在一些技术交流群,同样遇到过很多同学由于对性能测试理解上的误区导致的各种问题,比如:

  ·注册用户数=并发数,然后服务直接被打崩了;

  · 直接在生产环境压测:生产服务挂了,客户投诉;

  当然,这些都是比较基础的问题,刚入门的同学可能会犯这种错。如果有一定的项目实践经验,就会了解性能测试比我们想象的要复杂得多。除了对技术的广度和深度有一定要求之外,对业务的熟悉程度,对需求和场景的分析理解能力,甚至在压测实施过程中的沟通和协调能力,也有一定要的要求。

  这篇文章,聊聊和性能测试相关的话题,它的实施目的、在不同场景下的侧重点以及一些被大家忽视的点。

  性能测试的目的

  首先要认识到一点,抛开性能测试涉及到的技术栈,其实性能测试的本质和功能测试没什么区别。同样需要需求分析、场景设计、准备测试用例和测试数据。功能测试是手动执行用例,观察结果,性能测试则大多是借助工具或者脚本来执行测试用例观察结果。

  功能测试的目的是验证产品设计的功能正确性,找到功能上和设计不符的bug;性能测试则是找到应用服务处理能力存在的瓶颈,然后针对性的优化,为线上的容量规划和服务稳定性提供支撑。那么问题来了:如何定义所谓的处理能力瓶颈?这就需要锚定业务价值了。

  性能测试的需求基本来自业务,比如用户反馈APP响应太慢、财务或成本部门反映IT的硬件成本太高,或者运营活动由于系统挂了导致业务目标未达成。这些问题归类来说,都是用户和业务的痛点诉求:

  · APP响应太慢:提升处理速度——降低响应时间(RT);

  · 硬件成本太高:降低硬件成本——提升单位资源的处理能力(TPS);

  · 业务目标未达成:提升系统稳定性——提高业务成功率(99%-99.99%);

  总结一下就是:降低成本、提升用户体验、保障业务目标达成,这就是所谓的业务价值!

  性能测试的最终目的和功能测试本质上没区别,就是为用户提供正确稳定的服务和良好的用户体验,保障业务目标达成。为了满足用户和业务的诉求而采用的一系列技术方案,都是为了达成这个目的的手段而已。

  不同项目侧重点

  聊完了性能测试的目的,接着回到具体的项目实践中。日常工作中最常见的项目类型,大概可以分为如下几种:

  版本迭代

  版本迭代算是软件工程师的工作日常了,这种类型的项目中,性能测试主要的侧重点聚焦在系统的处理能力方面。即验证系统是否由于需求迭代&新的代码引入而导致了系统处理能力下降,主要关注的指标是TPS&99RT&请求成功率等方面。从体系建设的角度来说,可以通过建立性能基线来评估系统长期的性能质量。

  配置变更

  我们都知道很多的线上故障是变更引起的,但其实很多时候性能的变化,可能就是一个小小的参数变更导致的。细分的话性能测试场景中有一项叫做配置测试,就是为了验证由于系统各项参数或者服务配置的变化而带来的性能变化。常见的有下面两种:

  · 软件参数变更:比如线程池连接数、超时时间等;

  · 硬件配置变更:比如服务器升配降配带来的性能变化对比;

  这种配置变更带来的性能变化,更关注的是中间件和基础服务层面,因为这种变更往往容易被忽略,但这种变更又会对线上服务的性能和稳定性带来很大的影响。

  新服务上线

  在日常的版本迭代之外,还比较常见的是新服务上线这种项目。比如技术改造、服务拆分、引入新的服务供应商等,一般都需要进行性能测试来验证是否会对已有系统造成影响。

  新服务上线进行性能测试的主要目的是验证系统的健壮性,即发现一些较为明显的性能问题,比如:内存泄漏、业务超卖、死锁、慢SQL等情况。

  稳定性保障

  大部分的性能测试都是在线下环境开展的,但性能测试的结果一定要对线上的容量规划和稳定性保障提供支撑,否则性能测试没有太多价值。

  虽然已经2023年了,生产全链路压测提出到现在也快11年了,但截至目前大多数公司还是不具备在生产环境进行性能测试的能力,其中原因很多。比如生产环境开展压测成本高风险大,比如大部分公司并没有很高的并发访问量,比如技术建设和储备不够深,究其根本原因,其实就是投入和产出的平衡问题。

  当然,技术如何创造业务价值是一个很复杂的问题,但有一个关于全链路压测的误区,也是很多人忽视的。

  生产全链路压测只适合某一部分具有特定业务需求的公司,能否实施取决于是否有合适的组织管理能力和对应的技术架构。生产全链路压测并不是银弹,也不单单只是一种测试的技术手段,如果将生产全链路压测看作一种促进生产服务稳定性的技术实践,那它有很多可以挖掘的价值点。但在实际落地过程中,只能说对技术的理解和对业务价值的认知,大家都好像走入了误区。

场景建模的误区

  经常有同学问:我能不能一个用户的数据拿来重复压测,反正也是并发请求的。

  在功能测试中,我们会根据要测试的场景和测试用例,准备对应的符合场景的测试数据,为什么性能测试的时候反而忽视了呢?这其实也是一个认知误区:性能测试就是模拟高并发给系统发请求。

  正确的做法是和功能测试类似的,建立业务模型&流量模型&数据模型之间的映射关系,准备对应的符合测试场景的测试数据,并且要保证数据量足够测试使用。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

 

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

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

相关文章

Top命令

Top top - 12:46:01 up 2 days, 11:10, 3 users, load average: 0.56, 0.59, 0.45系统基本信息:显示了系统运行时间、登录用户数和平均负载(load average)情况。平均负载是系统在特定时间范围内的平均活跃进程数,可以用来衡量系…

自动驾驶之轨迹规划8——Apollo参考线和轨迹

1. abstract 本文主要讲解routing和planning模块中的reference line,我之前一直搞不明白这个reference line是如何生成的,有什么作用,和routing以及planning的关系。现在有了一些心得打算梳理一下: 决策规划模块负责生成车辆的行…

Go基础—反射,性能和灵活性的双刃剑

Go基础—反射,性能和灵活性的双刃剑 1 简介2 结构体成员赋值对比3 结构体成员搜索并赋值对比4 调用函数对比5 基准测试结果对比 1 简介 现在的一些流行设计思想需要建立在反射基础上,如控制反转(Inversion Of Control,IOC&#x…

7.27 Qt

制作简易小闹钟 Timer.pro QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # dep…

替换字母题解

样例输入1: 5 4 abcab样例输出1: 1样例输入2: 5 3 abcab样例输出2: 2思路分析: 看到这种题,先想到 O ( 26 n ) O(26\times n) O(26n)的时间复杂度,枚举把字符串都变成每一个字母所需要的最…

ubuntu20.04 安装 docker engine

打开docker官网 点击上图中间的Linux,会是这样: 点击上图的左边栏的 Docker Engine,点击install, 点击 Ubuntu,会是这样: 把页面翻下来,先按照 Insstallation methods 中的 set up thre repository,执行这些…

平安私人银行受邀慈善服务高质量发展会议,分享慈善规划服务

近日,中华慈善总会家风传承与慈善信托委员会成立仪式,以及由中华慈善总会、中国银行业协会联合发起的“慈善顾问赋能计划”启动仪式在北京举行。平安私人银行受邀参会并分享慈善规划服务,平安私人银行慈善业务总监王英及平安私人银行客户、“…

[算法很美打卡] 多维数组篇 (打卡第二天)

文章目录 Z形打印边界为1的最大子方阵 Z形打印 package 每日算法学习打卡.算法打卡.七月份.七月二十七号;public class test1 {public static void main(String[] args) {int[][] matrix {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},};print(matrix);}static void print(int[…

基于信用博弈的数据价格动态评估模型

纯纯的,共享出来了 目录 摘要 2 数据价格动态评估模型 2.1 数据产品定价策略 摘要 传统数据交易平台中,定价完全由平台把控,数据所有者不明确数据潜在价值,网络买卖双方信用缺失,导致数据交易中的数据价格难以评估…

HCIA实验二

实验要求: 1.R2为ISP,只能配置IP 2.R1-R2之间为HDLC封装 3.R2-R3之间为PPP封装,pap认证,R2为主认证方 4.R2-R4之间为PPP封装,chap认证,R2为主认证方 5.R1、R2、R3构建MGRE,仅R1的IP地址固定…

自动发推技巧解析:让你的推文营销更容易上热门

作为一家企业在推特上发帖的目的就是能让更多人看到,也就是被算法拾取,从而推荐给更多的人,那么就需要首先了解推特的算法是怎么样的,才能利用好它进行推特自动发推群发,这里推特群推王给大家剖析一二: 上热门指什么&a…

day43-Feedback Ui Design(反馈ui设计)

50 天学习 50 个项目 - HTMLCSS and JavaScript day43-Feedback Ui Design&#xff08;反馈ui设计&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&q…

数据库分库分表备份

#!/bin/sh #调用系统函数库 . /etc/init.d/functions #Define variables BACKUPDIR/backup/sort/ MYSQLUSERroot MYSQLPASSWDRedHat123 MYSQLCMD"mysql -u$MYSQLUSER -p$MYSQLPASSWD" MYSQLDUMP"mysqldump -u$MYSQLUSER -p$MYSQLPASSWD -x -F -R" DATABASE…

ORB-SLAM3 单目运行EuRoC数据集

使用ORB-SLAM3运行EuRoC数据集&#xff0c;EuRoC数据集是无人家拍摄的&#xff0c;比较精确。 数据集测试 1&#xff09;从官网下载Euroc数据集&#xff0c;ASL格式&#xff0c;http://projects.asl.ethz.ch/datasets/doku.php?idkmavvisualinertialdatasets &#xff08;2…

xrdp登录显示白屏且红色叉

如上图所示&#xff0c;xrdp登录出现了红色叉加白屏&#xff0c;这是因为不正常关闭导致&#xff0c;解决方法其实挺简单的 #进入/usr/tmp cd /usr/tmp #删除对应用户的kdecache-** 文件&#xff08;我这里使用的是kde桌面&#xff09;&#xff0c;例如删除ywj用户对应的文件 …

32.选择器

选择器 html部分 <div class"toggle-container"><input type"checkbox" id"good" class"toggle"><label for"good" class"label"><div class"ball"></div></label&…

126.【Redis - 快速开发使用版】

Redis 二刷 (一)、认识NoSQL 与 SQL1.NoSQL与SQL的区别 (二)、认识Redis1.Redis 特征2.Redis安装及启动的三种方式 (基于Window)(1).命令行配置文件 3.Redis 客户端(1).命令行客户端(2).Redis可视化客户端 4.Redis 数据结构(1).Redis 通用命令(2).String 类型(3).Redis 的Key层…

回答网友 网友嫌弃俺用SUM,不用Count

网友嫌弃俺用SUM&#xff0c;不用Count 。俺就举了这个例子。sum有时很方便&#xff0c;可以一个select 完成多个数据的统计。 declare t table(usercode varchar(20),sex varchar(1) ,age int ,intern int ,city varchar(20) ) insert t(usercode,sex,age,intern,city) value…

状态机实现N位按键消抖

状态机实现N位按键消抖 1、原理 利用状态机实现按键的消抖&#xff0c;具体的原理可参考 (50条消息) 基于FPGA的按键消抖_fpga 按键消抖_辣子鸡味的橘子的博客-CSDN博客 状态机简介&#xff1a; 状态机分类可以主要分为两类&#xff1a;moore和mealy 根据三段式状态机最后…

《MySQL45讲》笔记—一条SQL查询语句是如何执行的、一条SQL更新语句是如何执行的

整体架构 server层包括连接器、查询缓存、分析器、优化器、执行器&#xff1b;存储引擎层负责数据的存储和提取&#xff0c;支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB&#xff0c;它从MySQL 5.5.5版本开始成为了默认存储引擎&#xff0c;如果在…