当前位置: 首页 > news >正文

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

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

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

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

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

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

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

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

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

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

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

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

一、性能测试想做什么

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

这是一个简化过的关于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

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

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

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

相关文章:

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

在企业中负责技术招聘的同学,肯定都有一个苦恼,那就是招一个合适的测试太难了!若要问起招哪种类型的测试最难时,相信很多人都会说出“性能测试”这个答案。 每当发布一个性能测试岗位,不一会就能收到上百份简历&#…...

天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)

前言 近年来,随着信息化进程的不断深入,人们对于信息的获取和处理需求越来越高。而其中,天气查询API是一个非常重要的服务,它能够帮助人们快速获取所在位置的天气情况,同时也为各类应用提供了必要的气象数据支持。 本…...

跨境电商的行业现状与发展趋势分析

随着互联网的不断发展,跨境电商作为一种全新的商业模式已经逐渐崭露头角。跨境电商的出现,让越来越多的商家看到了扩大市场的机会,也为消费者提供了更加便利、更加优质的购物体验。本文将从跨境电商的定义、行业现状、发展趋势等方面进行探讨…...

适配器设计模式

目录 前言: 适配器原理与实现 适配器模式的应用场景 1.封装有缺陷的接口 2.统一多个类的接口设计 3.替换依赖的外部系统 4.兼容老版本接口 5.适配不同格式的数据 代理、桥接、装饰器、适配器 4 种设计模式的区别 参考资料 前言: 适配器模式这个模…...

代码随想录算法训练营第三十五天-贪心算法4| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 参考视频:贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili 解题思路: 只需要维护三种金额的数量,5,10和20。 有如下三种情…...

2023MathorcupC题电商物流网络包裹应急调运与结构优化问题建模详解+模型代码(一)

电商物流网络包裹应急调运与结构优化问题 第三次继续写数模文章和思路代码了,不知道上次美赛和国赛大家有没有认识我,没关系今年只要有数模比赛艾特我私信我,要是我有时间我一定免费出文章代码好吧!博主参与过十余次数学建模大赛…...

软件测试技术之跨平台的移动端UI自动化测试(上)

摘要:本文提出一种跨平台的UI自动化测试方案,一方面使用像素级的截图对比技术,解决传统UI自动化测试难以验证页面样式的问题;另一方面用统一部署在服务器端的JavaScript测试代码代替Android和iOS测试代码,大大提高编写…...

【MySQL--02】库的操作

文章目录1.库的操作1.1创建数据库1.2创建数据库的案例1.3字符集和校验规则1.3.1查看系统默认字符集以及校验规则1.3.2查看数据库支持的字符集1.3.3查看数据库支持的字符集校验规则1.3.4 校验规则对数据库的影响1.4操纵数据库1.4.1查看数据库1.4.2 删除数据库1.4.3显示创建语句1…...

人民链Baas服务平台上线,中创助力人民数据共建数据服务应用场景

人民链2.0是数据要素大发展时代下的可信联盟链 作为区块链分布式存储领域行业先驱与让人民放心的国家级数据云平台,中创算力与人民数据的合作从未间断。为了推动人民链2.0高质量发展,中创算力与人民数据开展了多方面合作,助力人民数据共建数据…...

说说如何借助webpack来优化前端性能?

通过webpack优化前端的手段有: ① JS代码压缩 ② CSS代码压缩 ③ HTML文件代码压缩 ④ 文件大小压缩 ⑤ 图片压缩 ⑥ Tree Shaking ⑦ 代码分离 ⑧ 内联 chunk 1、JS代码压缩 terser是一个JavaScript的解释、绞肉机、压…...

AiDD AI+软件研发数字峰会开启编程新纪元

随着OpenAI 推出全新的对话式通用人工智能工具——ChatGPT火爆出圈后,人工智能再次受到了工业界、学术界的广泛关注,并被认为向通用人工智能迈出了坚实的一步,在众多行业、领域有着广泛的应用潜力,甚至会颠覆很多领域和行业&#…...

【远程开发】VSCode使用Remote SSH远程连接Linux服务器

文章目录前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar4.2 创建隧道映射4.3 测试公网远程连接5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程转发自CSDN远…...

C++纯虚函数和抽象类详解

在C中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上0,表明此函数为纯虚函数。 最后的0并不表示函数返回…...

服务器上搭建jenkins打包工具

一、环境准备 1.安装jdk,这里我安装的jdk8 https://www.oracle.com/java/technologies/downloads/#java8 2.安装jenkins,使用镜像地址安装 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/?CN&OD 注意要选择支持当前安装的jdk版…...

全球化背景下,如何利用内容营销促进跨境电商业务增长

随着全球跨境电商市场的迅速发展,越来越多的企业开始将注意力转向跨境电商。然而,随着竞争的激烈化,企业不再能够仅仅依靠产品本身来吸引消费者的注意。因此,内容营销成为了跨境电商企业在吸引、留住消费者方面的关键。在这篇文章…...

数据库系统工程师——第二章 程序语言基础知识

文章目录📂 第二章、程序语言基础知识 📁 2.1 程序语言概述 📖 2.1.1 程序语言的基本概念 📖 2.1.2 程序语言的基本成分 📁 2.2 程序语言翻译基础 📖 2.2.1 汇编程序基本原理 📖 2.2.2 编译程序…...

UFT参数化的使用

使用Systemutil.Run打开程序。将01_Login/02_New Order/03_Logout三个操作分为3个Action。生成共享对象库关联到这三个Action。在01_Login操作模块中,将登录名和密码设置为环境变量参数,环境变量参数采用用户自定义,定义为AgentName和Passwor…...

Java模拟rank() over()函数获取分组排名的方法设计及实现

背景 考试批次班级姓名语文202302三年一班张小明130.00202302三年一班王二小128.00202302三年一班谢春花136.00202302三年二班冯世杰129.00202302三年二班马功成130.00202302三年二班魏翩翩136.00 假设我们有如上数据,现在有一个需求需要统计各学生语文单科成绩在班…...

不用但一定要懂 ---- iOS 之 响应链、传递链 与 手势识别

iOS 事件的主要由:响应连 和 传递链 构成。一般事件先通过传递链,传递下去。响应链,如果上层不能响应,那么一层一层通过响应链找到能响应的UIResponse。 响应链:由最基础的view向系统传递,first view ->…...

观早报 | 特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿

今日要闻:京东拟今年发布千亿级产业大模型;特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿;英特尔落户海南三亚;日本人要搞二次元老婆版 ChatGPT京东拟今年发布千亿级产业大模型 据《科创板日报》消息,京…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...