面试了上百位性能测试后,我发现了一个令人不安的事实...

news2024/11/20 13:27:40

在企业中负责技术招聘的同学,肯定都有一个苦恼,那就是招一个合适的测试太难了!若要问起招哪种类型的测试最难时,相信很多人都会说出“性能测试”这个答案。

每当发布一个性能测试岗位,不一会就能收到上百份简历,其中不乏学历亮眼、背景出色、简历里各种高并发、大流量的项目经验。

但是进入面试环节后,却发现绝大多数的候选人,简历上所谓的性能测试经验,都是停留在工具使用、脚本编写的水平,通常都是把脚本放到压力机上跑一下,然后统计出数据就完了。

当你希望候选人讲一个项目中遇到的性能问题,以及如何分析定位时,却发现绝大多数根本没有遇到过性能问题。

也有少量候选人也测出过一些性能问题。然而追问其性能瓶颈的原因以及如何解决时,对方却回答说,把问题抛给开发后,由开发来解决,至于什么原因,后续并没有关注。

甚至面试了几个高级性能测试工程师,还是发现一旦涉及到性能分析调优,就开始左顾右盼、答非所问

究其原因,大部分测试同学本身参与的性能测试项目就比较少,从而造成遇到的性能问题的概率就很低。即便是专职做性能测试的,如果你没有良好的追踪和总结问题的习惯,而是过度的依赖开发,那自然也不会有太多的积累

不要说测试了,就算是开发,能有几个懂性能分析调优呢?性能难,难于上青天。企业希望能招到擅长性能分析的人。而广大测试小伙伴却根本没有实践机会,何来经验积累?这本身就是一个行业矛盾!

有时候我就在天真的想,如果能有人把自己的性能分析经验免费分享出来该多好啊!

有这样的人吗?有!那就是我哈哈哈

一、性能测试想做什么
二、性能测试的基本流程
三、性能测试的前期准备
四、性能测试的工具及相关学习建议(文末分享性能测试学习资源)

一、性能测试想做什么

首先,性能测试想做的事情,类似下图:

这是一个简化过的关于web应用的服务端的性能测试示意图,性能测试想要模拟真实业务场景。当一个应用上线,有很多用户通过客户端访问服务端。他们把请求通过用户界面发送给了服务端,于是在服务端接收到了大量的请求,如果用户数很多,那么服务端有可能承受不了这种压力,进而崩溃,严重的可能导致大量经济损失。

性能测试则是希望通过提前模拟这种压力,来发现系统中可能的瓶颈,提前修复这些bug,减少服务器宕机的风险。此外,性能测试还可以用来评估待测软件在不同负载下的运作状况,帮助管理层做一些决策。比如早期有的管理者会希望通过性能测试来评估需要买几台服务器。但,这种做法随着云计算的普及,已经过时。在云计算平台上,硬件资源可以弹性获取,自动调整。云计算也会对性能测试的方式产生影响,包括服务端资源监控在内的很多工作,未来都可以交给云计算平台了。大家也可以关注一下,云计算对传统测试工作的冲击。

二、性能测试的基本流程

下图表示了一个简单的性能测试的基本流程中,我们怎样得到性能测试的结果。

然后,这只是一轮性能测试的开始,得到性能测试的结果之后,还有很多工作:

可以说,这里的调优过程才是性能测试的技术含量所在。这可能也是性能专家这个角色存在的意义之一。而测试人员通过做性能测试,进阶成为性能专家,也是一种发展方向。但不得不说,这条路是比较难走的,限于我个人视野,我觉得DBA、运维、开发、这些角色都比测试更容易发展为性能专家。当然是否走这条路也要看个人兴趣了。

调优的话,主要看调优小组推测的瓶颈在哪里,比如推测瓶颈在数据库,可能让DBA调整一下数据库配置,然后再测一遍。推测瓶颈在第三方提供的设备上,那就咨询一下第三方的技术支持,然后调整一下配置再测一遍。这个调优过程,可能比较长。

从以上两图可以看出,在整个性能测试过程中,测试人员能做的工作其实并不多,且大多数属于第一阶段的低技术含量工作。主要集中在脚本录制或编写、性能监控器的配置和数据的收集上。后者还会受到云计算平台普及的冲击,很可能以后不用你做任何工作就能简单得收集到想要的资源使用情况数据。而在第二阶段调优时,性能调优小组的介入使测试人员存在感进一步下降。其中水平较低的测试人员将沦为脚本执行员和脚本修改操作员。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!qq群号:110685036

 

三、性能测试的前期准备

此外,还有一个性能测试还有一个前期准备阶段:

这里先补充一些名词解释,我只是根据自己理解写一下,并不精确。精确定义大家可以网上搜索,另外我最后会推荐一些参考资料。

吞吐量:

表示待测应用对业务的支持量,以TPS或QPS为单位,表示每秒钟能处理的请求数。需要分析业务场景来计算吞吐量。

请听题:小明办了一个电影网站,每天有2000个用户会上来看电影,假设每个人都只看一部电影,该电影网站每本电影需要播放两小时。每个用户每次看一本电影会向待测应用运行的服务器发送10个请求,其播放的电影数据存储和传输在第三方,本题中不需要考虑。每天晚上7点到9点为黄金时间,在每天的用户中会有一半人选择在这个时间点上来看电影。请计算该网站的平均吞吐量和峰值吞吐量。

-----自己思考-----

-----自己思考-----

-----自己思考-----

平均吞吐量=总请求数/总时间 = 2000×10/(24×3600)

峰值吞吐量=峰值请求数/峰值时间 = 2000*0.5*10/(2*3600)

具体数字就不算了,算出来你发现吞吐量很低很低。这是因为这些数据我是随便造的,并且我之前工作过的电影网站吞吐量确实也很低,没多少用户。然后除了这些,还有很多估算。比如故意夸大一点,乘以一个估算系数之类的。总得来说,算出来的吞吐量不一定很精确,对计算公式感兴趣的话,可以搜索一下,有很多人给出更具体的例子。

如果你还有许多困惑,那么我整理的视频资源和文档会是你的良师益友,或许可以给你带来一些实际性的帮助与突破。

点击文末小卡片关注我的gzh免费获取~

虚拟用户数:

性能测试要模拟的用户数量。

性能测试结果:

包括响应数据和性能指标。

响应数据相关的常见指标有:90%平均响应时间、错误率等

性能指标包括CPU,I/O,Memory,Network四个方面,每个方面都有几个指标。

关于这块,相信你能在网上找到相关文章教你的,我这里就不展开了。

测试策略,代表设计这些场景的依据,在这里主要有以下几种:

注意,这里的名字并不是全球统一的,不同的公司,不同的人可能对同一种测试策略有不同的叫法。

1)基线测试,又叫基准测试:
测一下单个用户做主要业务流程的场景。其性能测试结果会作为比对依据。
2)性能测试:
逐步增加用户数,比如10个,20个,50个,80个,130个,得到不同用户数情况下的性能测试结果变化趋势图。这个图里常常可以发现性能瓶颈。比如用户数到某个值时突然性能指标下降了很多,错误率大幅上升了。那就需要进一步分析是软件的问题还是硬件的问题,还是环境的问题等。
3)压力测试:
使用超过系统设计的最大用户数,看看待测应用会不会崩溃,会怎么样,有没有隐患和风险等。
4)负载测试:
在比较高的用户数情况下,较长时间得执行测试,观察系统在较高负载较长时间下的稳定性。
5)根据性能测试的负载生成器所在位置,还可以分出本地同网络的测试和跨网络的测试。
6)还有当下比较时髦的全链路测试,其实就是把真实环境划出一块来做测试。这样来解决估算不准的问题。这块网上有一些资料,但不太多。

关于分析生产环境和建立估算模型。可以去搜搜阿里研究员对全链路压测的演讲。或者去找其他资料。我也没估算过,不展开了。我只做过最简单的,在没上线的生产环境上做性能测试。但估算的问题很明显就是:很难估算准确。

其他在前期要做的事情,还有确定测试通过标准,比如吞吐量要达到多少,错误率低于多少,响应时间要多快,服务器CPU占用率要多少以下等等。

以及确定测试环境用什么设备,怎么搭建。等等。

四、性能测试的工具及相关学习建议

然后说到测试工具,再吐槽一下一上来就问工具的人。上面这么多原理你如果不了解的话,只会用工具是没什么用的。

现在的主流性能测试工具是:Jmeter、其次Grinder,Gatling,Locust,Loadrunner等等等等,此处排名不分先后。我也不知道哪个工具是第二流行的。

jmeter的学习主要通过官方用户手册。现在这个工具对我来说最大的问题就是图形界面用起来挺麻烦。后来的很多工具已支持纯脚本或代码方式描述测试场景。不过幸好我也不经常做性能测试。我的建议是大家都要学jmeter,其他工具可以选学,loadrunner除非真的你公司要用否则不用学。

而监控服务器指标方面,jmeter有插件支持。也可以用linux命令行工具做。也有人用商业工具做。总之要把服务器性能指标和请求响应时间两组数据的时间线对上,让我们可以看到什么时候发送了多少请求,响应时间多少,错误率多少,此时服务器负载又是多少。

此外再推荐blazemeter的博客。blazemeter虽然是付费工具,但他的博客里有很多干货,比如性能测试指标怎么分析,看到性能指标图在什么地方出现拐点最可能的瓶颈在哪里。他有很多不错的文章,是我近期研究性能测试工具时常常查看的。

另外强烈推荐这本书,可以带你了解一下web应用的性能测试到底是怎么回事:

微软MSDN上的:Performance Testing Guidance for Web Applications

不懂英文没关系,这本应该是有中文翻译本的。

总而言之,不管你做不做性能测试,多多少少要知道是怎么回事,可能什么时候你领导就要你做个简单的性能测试呢。也要有逐步加压的做性能测试的这种概念和思路。性能测试本身也是很系统化的一种测试,其中各个步骤环环相扣的特点,也是其最有意思的地方。

好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。
如果这个文章写得还不错,觉得我彭于晏有点东西的话 求点赞 👍求关注 ❤️求分享 👥 对耿男我来说真的非常有用!!!
白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

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

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

相关文章

商会协会入会资源需求活动小程序开发

商会协会入会资源需求活动小程序开发 功能列表: 用户注册:用户可以通过小程序注册账号并加入商会协会。会员管理:可以管理会员的基本信息,包括个人信息、公司信息、会员资格等级等。同时,管理者可以根据会员等级制定…

JavaSE抽象类和接口

文章目录JavaSE抽象类和接口一、抽象类1、抽象类概念2、抽象类特性二、接口1、接口概念2、接口特性3、多接口4、接口之间的继承5、常用接口使用6、抽象类和接口的区别三、Object类JavaSE抽象类和接口 一、抽象类 1、抽象类概念 一个类中没有包含足够的信息来描绘一个具体的对…

最长公共子序列(动态规划)

Time Limit: 1 Sec Memory Limit: 128 Mb Description 求两个序列的最每组测试样例都为一行,两组字符串,每组不超过1000,用空格隔开。求最长公共子序列,都为小写字母。Input 每组测试样例都为一行,两组字符…

PHP快速入门03-面向对象编程

文章目录前言面向对象编程关于PHP的面向对象编程类的默认方法和属性面向对象编程示例总结前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 面向对象编程 关于PHP的面向对象编程 PHP的面向对象编程(Object-Oriented Programming,OOP…

OK-3399-C ADB烧录

ADB烧写 一、OK3399用户资料工具目录附带了ADB工具的资料包路径: 二、将其解压在C:\User目录 三、将设备通过type-c线download口与电脑相连接,打开命令行,进入解压的目录,查看adb是否安装成功: 四、安装成功后&#x…

gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT

原文:gpt4all保姆级使用教程! 不用联网! 本地就能跑的GPT 什么是gpt4all gpt4all是在大量干净数据上训练的一个开源聊天机器人的生态系统。它不用科学上网!甚至可以不联网!本地就能用,像这样↓: 如何使用&#xff…

【针对项目在线OJ系统的测试】:Junit+Selenium

目录 一、背景介绍: 二、导入的依赖: 三、测试模块1:index页面的测试 测试点1:测试"我的OJ系统这4个字是否存在" 测试点2:测试"题目列表"这4个字是否存在 测试点3:测试"编号…

设计模式(十二)之装饰器模式

文章目录什么是装饰器模式例子:总结什么是装饰器模式 现在有一块蛋糕,涂上奶油就变成了奶油蛋糕,如果加上草莓就是草莓奶油蛋糕,再加上蜡烛就变成了生日蛋糕。 程序中的对象与蛋糕十分相似。将对象类比成蛋糕,不断的加…

Faster-RCNN代码解读6:主要文件解读-中

Faster-RCNN代码解读6:主要文件解读-中 前言 ​ 因为最近打算尝试一下Faster-RCNN的复现,不要多想,我还没有厉害到可以一个人复现所有代码。所以,是参考别人的代码,进行自己的解读。 ​ 代码来自于B站的UP主&#xff…

Qt音视频开发36-超时检测和自动重连的设计

一、前言 如果网络环境正常设备正常,视频监控系统一般都是按照正常运行下去,不会出现什么问题,但是实际情况会很不同,奇奇怪怪七七八八的问题都会出现,就比如网络出了问题都有很多情况(交换机故障、网线故…

TensorFlow 1.x 深度学习秘籍:11~14

原文:TensorFlow 1.x Deep Learning Cookbook 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如…

持续集成——通过docker命令安装Jenkins

一、持续集成体系介绍 1、核心价值: 集成自动化测试,减少重复劳动 尽早发现和解决缺陷,减少风险 形成有机整体,明确阶段交付物 2、常见集成方案 a、阶段化 为不同的构建测试套件建立不同的CI循环周期 单元测试运行时间短,反馈…

测试基础篇

目录软件测试的生命周期测试用例设计如何描述一个bug如何创建一个Bug案例Bug的级别Bug的生命周期测试人员和开发人员产生争执了怎么办?软件测试的生命周期 软件测试的生命周期:需求分析→测试计划→测试设计、软件开发→测试执行→测试评估 软件测试&a…

AXI DMA

PG021 AXI DMA:AXI Direct Memory Access AXI DMA为内存和AXI4-Stream外设之间提供了高带宽的直接内存访问,其可选的S/G功能可以将CPU从数据搬运任务中解放出来。 AXI DMA通过AXI4-LITE接口对寄存器做一些配置和获取 MM2S:MemoryMap to St…

css 盒模型

CSS 中的盒子模型包括 IE 盒子模型和标准的 W3C 盒子模型。 box-sizing(有 3 个值哦):border-box,padding-box,content-box 这两种盒子模型最主要的区别就是 width 的包含范围: 在 标准的盒子模型中,width只是 content 部分(b…

嵌入式51单片机02-独立按键系列

文章目录独立按键一. 独立按键基础知识二. 独立按键系列代码1. 独立按键控制LED(按下灯亮,松开灯灭)(1)仿真电路图(2)源代码(3)实验结果2. 独立按键控制LED(按…

聚观早报|阿里云正式推出通义千问;京东零售开启5年最大组织变革

今日要闻:国家网信办规范生成式人工智能服务;阿里云正式推出通义千问;京东零售开启5年来最大组织变革;飞书将推出智能AI助手「My AI」;乐高将继续扩大在华零售布局国家网信办规范生成式人工智能服务 4 月 11 日&#x…

谈一谈Java的ThreadLocal

目录 先说原理: 再上代码: 运行结果: 先说原理: ThreadLocal 是一个本地线程副本变量工具类,它可以在每个线程中创建一个副本变量,每个线程可以独立地修改自己的副本变量,而不会影响其他线程…

【进阶C语言】自定义类型:结构体,枚举,联合

前言 作者简介:热爱跑步的恒川,正在学习C/C、Java、Python等。 本文收录于C语言进阶系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等,持续更新! 相关…

ECM8.0——CCCM相关代码

ECM8.0——CCCM相关代码概览predIntraCCCMxCccmCalcModelsxCccmApplyModelxCccmCreateLumaRefxCccmGetLumaRefBufxCccmGetLumaPuBufxCccmCalcRefAverxCccmCalcRefArea概览 函数名称函数作用predIntraCCCM总体代码,根据CCCM技术预测输出xCccmCalcModels计算CCCM滤波器…