一篇文章带你搞定企业级完整性能测试流程

大部分公司在最初试的阶段只会关心项目的基本功能,能用就可以。但是随着项目的成熟,用户量逐步的增大,线上经常就会出现一些系统崩溃,用户反映系统太慢等性能问题的爆发。所以,性能测试的需求就逐步变得迫切了。所以,基本上90%的公司,都会只重视功能测试同时,也把项目的性能测试列为重点关注对象,这就导致测试市场上【性能测试工程师】的岗位需求越来越多了。

什么是性能测试

要做性能测试,我们需要先弄清楚什么是性能测试,以及性能测试和通常的功能测试有什么差异?

首先,众所周知,功能测试是模拟一个人使用某个系统的某个功能,测试使用后的实际结果与预期结果是否一致;

性能测试与之最大的差别就就是,模拟N多个人同时使用某个功能,观察以下数据指标:

  • 多久时间能收到结果,也就是我们常说的性能指标,RT【响应时间】

  • 多少人能正常收到结果,也就是性能测试指标 最大并发用户数。

  • 服务器在多人同时使用时资源消耗多少

所以,在执行和关注结果层面,性能和功能测试都有本质上的区别。

图片

 

企业性能测试流程

在公司做性能测试流程跟功能测试流程也有一定差异,如下图所示:

图片

第一步:性能测试准备
1.1 测试指定标准

功能迭代完成了,预发布完成后,功能稳定了,这是性能的准入原则;

而且是否有必要做性能测试需要进行评估。比如有些伪需求,简单的逻辑不会影响性能,不需要做性能测试;非核心模块做性能测试,投入产出比也比较低,也没有必要做。

1.2 性能需求分析、量化性能指标

产品的功能点很多。做哪些功能的性能测试?边界、范围要明确。讨论到底具体做哪些功能。

出性能报告的时候,性能标准是什么也要先明确,如果没有给出特殊指标值,就以行业标准来定。

  • 行业内标准:【ART<1.5s,ERR<0.1%,服务器资源利用率<80%】

第二步:性能测试环境搭建

明确了需求后,开始搭建独立性能测试环境,性能测试环境要求:

  • 独立网络(有线、局域网)

  • 独立服务器 (硬件配置要与生成一致、服务部署架构要与生成一致,集群大小,可以缩减

并且要同步搭建性能测试结果监控平台:比如 prometheus,grafana,influxdb ,现在市面上很多监控都是基于prometheus+grafana的二次开发页面展示不一样的。为了方便直接对测试结果进行监控分析,我们可以提前搭建好这些监控平台。

第三步:性能测试脚本开发和执行:脚本制作,调试和验证脚本

性能测试脚本开发和执行需要借助工具来实现,性能测试工具目前市场主流的有:

  • Jmeter 开源免费,学习资料比较多,java开发,跨平台【win mac Linux都可以用】,推荐优先使用。

  • Loadrunner,需要收费,市场份额相对较少;C语言开发,破解版本<11版本,12版本免费只能使用50用户数,更新很慢。破解版使用有风险。

  • locust 需要代码基础,用的也比较少;公司自研使用。Python语言自行开发。

我们以最主流的Jmeter工具给大家讲解性能场景设计与执行,常见的测试模型有:

1)基于并发数模型:线程数梯度增加,压出系统能承受的最大并发用户是

 

图片

2)基于TPS压测模型:目标一般是为了压出系统最大的TPS,所以会采取平缓增加TPS的模式。

这里的RPS可以等同于TPS,以下图就是5分钟内TPS从1-20,下个5分钟20-50,下个5分钟50-100,最后加到300后,持续600s,如此设计平缓递增。

图片

第五步:性能测试结果分析和调优

性能测试最重要的部分其实就是结果分析和调优。在性能测试过程中对各种数据进行监控与收集,包括被测项目的监控(服务 + 服务器),硬件资源监控+项目服务监控等。通过对测试结果与监控数据综合分析,进行问题定位、分析、调优。

问题分析和调优的基本步骤主要可以按照如下顺序进行:

  1、由外及内: 检查RT>检查tps>检查负载机资源情况>检查服务器资源情况>检查         中间件、数据库配置>中间件、数据库耗时分析

  2、由表及里:自身问题>服务器硬件瓶颈 > 网络瓶颈 > 服务器os瓶颈> 应用瓶颈

  • 自身问题:优先找自己的问题,因为可能脚本,客户端端口不够、网络不好等问题。

  • 服务器硬件瓶颈:CPU 内存 磁盘等

  • 服务器os瓶颈:参数配置、数据库、web服务器

  • 应用瓶颈:sql语句、数据库设计、业务逻辑、算法

调优后再验证测试,检查问题是否已经解决。

性能测试通过标准& 验收标准:

图片

第六步:性能问题跟踪与报告

当以上的步骤都做完后,就可以开始整理编写性能测试报告。

性能测试报告要素:

1、背景 :为什么要做压测的目的。

2、压测内容:方案里有体现,范围和场景和环境 脚本 架构图等。

3、压测结果(截图):指标项的记录,TPS,资源使用情况等,截图附上作为证      据,也更加直观和后续对比分析。

4、问题和调优:通过什么现象发现是个问题,然后调优的方法;包括已解决,待解    决的问题;如果没有办法避免,写到结论里。

5、压测结论&建议 :简洁明了,接口的最大并发用户数 响应时间 资源利用率等作    为一个图标展示,明确的结论:是否达标。

然后进行性能测试问题跟踪

记录需要跟踪的性能问题:问题可能不是一时半会能修复的,也需要问题跟踪。

性能测试的意义和价值

性能测试对于项目和企业有这重要的意义和价值。我们可以从以下场景来阐述:

1、如果公司需要升级硬件或者服务,我们需要对其进行性能测试,对比升级前后是否有性能提升或者降低;如果硬件升级后,没有提升,就不用升级硬件了;

  • 这就可以大大的减少硬件上投入,为公司缩减没有必要的成本。

2、根据性能测试的数据,预估生产环境,方便配备硬件配置、服务的数量。

  • 性能测试的环境 一般期望硬件配置与生产环境保持一致,但是数量不要求相等。

  • 这样评估可以更加合理的安排生产环境的设备配置。

3、日常工作的性能测试,及早的发现一些性能隐患。比如挑选一些性价比最高的模块来做性能测试,可以高效帮助公司避免一些用户流失和经济损失。以下是常见的需要做性能测试领域:

  • 核心的功能

  • 用户使用量做多的

  • 赚钱的模块

  • 有活动的,突发的并发用户,指导突发流量承载方案的指定。

4、及时发现和避免用户越权事故。

功能测试中多次点击会出现重复数据,在性能测试里就是多个用户并发的时候发现重复数据,数据互串,很有效的发现用户越权的安全问题。

总结

综上所述,性能测试对于企业来说必不可少且意义重大。然后现在人才市场上真正掌握性能测试人却少之又少,很多企业都无法真正找到全面的性能测试人才,所以这块也是一个技能缺口,目前在做测试岗位的同学们,可以往性能测试方向发展和提升,从而确保自己的测试地位。

 

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

 

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

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

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

相关文章

【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习 深度学习是加深了层的深度神经网络 加深网络 本节我们将这些已经学过的技术汇总起来&#xff0c;创建一个深度网络&#xff0c;挑战 MNIST 数据集的手写数字识别 向更深的网络出发 基于33的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基…

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库&#xff0c;其支持将一个对象进行按照 JSON XML HTML 等格式进行转换&#xff0c;并获取到结果字符串&#xff01; 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…

【C++初阶】内存管理

目录 一.C语言中的动态内存管理方式 二.C中的内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 3.浅识抛异常 &#xff08;内存申请失败&#xff09; 4.new和delete操作自定义类型 三.new和delete的实现原理 1.内置类型 2.自定义类型 一.C语…

电机应用-正点原子直流有刷电机例程笔记

目录 基础驱动实验&#xff1a;调速和换向 初始化工作 电机基础驱动API 电压、电流、温度检测实验 初始化工作 采集工作 编码器测速实验 编码器接口计数原理 初始化工作 编码器测速工作 速度环控制实现 PID相关函数 PID运算 电流环控制实现 PID相关函数 PID运算…

代码随想录算法训练营第三十三天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005.K次取反后最大化的数组和 刷题https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/文章讲解https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.…

iOS-设置指定边圆角(左上、左下等)

以UILabel举例&#xff0c;效果图如下&#xff1a; 代码如下&#xff1a; //设置左上与右下圆角&#xff08;可自行编辑指定圆角位置&#xff09; UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:_sleepStateLabel.bounds byRoundingCorners:UIRectCornerT…

Python 全栈系列227 部署chatglm3-API接口

说明 上一篇介绍了基于算力租用的方式部署chatglm3, 见文章&#xff1b;本篇接着看如何使用API方式进行使用。 内容 1 官方接口 详情可见接口调用文档 调用有两种方式&#xff0c;SDK包和Http。一般来说&#xff0c;用SDK会省事一些。 以下是Python SDK包的git项目地址 安…

“环波罗的海”包围圈将正式形成

据“直新闻”的消息称&#xff0c;近日匈牙利国会同意了瑞典加入北约的申请&#xff0c;在走完相关后续程序后&#xff0c;瑞典就将成为北约第三十二个成员国&#xff0c;而北约对俄罗斯打造的“环波罗的海”包围圈也将正式形成&#xff0c;即除俄方外&#xff0c;波罗的海周边…

JEECG_ExcelExportServer批量数据导出超过60000条

项目上线了,结果导出数据时发现只能导出6w条,好奇怪啊... 本地试了试结果每次都卡在10w条. orz 开始扒拉批量导出 ExcelBatchExportServer server new ExcelBatchExportServer();server.init(exportParams,TTransLine.class);server.write(exportList);Workbook workbook s…

github如果给第三方项目提PR(Pull Request)

参考&#xff1a; https://blog.csdn.net/Leventcoco/article/details/135871779 1&#xff09;第一步 先fork第三方项目 点击fork然后就同步一份到自己名下了&#xff0c;后续修改在自己名下这项目上先修改&#xff1a; 2&#xff09;修改项目&#xff08;要提交的新功能或…

阿里云幻兽帕鲁服务器怎么续费?阿里云服务器租用价格优惠有哪些?

阿里云幻兽帕鲁服务器的续费可以通过登录阿里云账户&#xff0c;访问ECS控制台页面来进行。首先&#xff0c;需要在控制台中找到想要续费的幻兽帕鲁服务器实例。接着&#xff0c;在控制台页面左侧导航栏中找到“费用中心”&#xff0c;点击进入&#xff0c;在费用中心页面中找到…

一个Web3项目的收官之作,必然是友好的用户界面(Web3项目三实战之四)

正如标题所述,一个对用户体验友好的应用,总是会赢得用户大加赞赏,这是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一个外观优美、用户体验效果佳的的界面,那么,这个应用无疑是个成功的案例。 诚然,Web3项目虽然核心是智能合约攥写,但用户界面也是一个DApp不…

WSL2外部网络设置

1 关闭所有WSL系统 wsl --shutdown 2 打开Hyper-V管理器 3 将“虚拟交换机管理器”-> ”WSL连接类型“设置为“外部网络” 4 启动WSL系统&#xff0c;手动修改WSL网络 将WSL网络IP修改为192.168.1.9 sudo ip addr del $(ip addr show eth0 | grep inet\b | awk {print $2} |…

前端monorepo大仓共享复杂业务组件最佳实践

一、背景 在 Monorepo 大仓模式中&#xff0c;我们把组件放在共享目录下&#xff0c;就能通过源码引入的方式实现组件共享。越来越多的应用愿意走进大仓&#xff0c;正是为了享受这种组件复用模式带来的开发便利。这种方式可以满足大部分代码复用的诉求&#xff0c;但对于复杂…

C++基于多设计模式下的同步异步日志系统day2

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容实现了日志代码设计的实…

【详识JAVA语言】方法签名

方法签名 在同一个作用域中不能定义两个相同名称的标识符。比如&#xff1a;方法中不能定义两个名字一样的变量&#xff0c;那为什么类中就可以定义方法名相同的方法呢&#xff1f; 方法签名即&#xff1a;经过编译器编译修改过之后方法最终的名字。具体方式&#xff1a; 方…

python3.x的在线与离线安装纯净版

由于计划搭建一套使用python自动分析日志的流程&#xff0c;发现我们的测试环境CentOS 7仍然没有安装python3&#xff0c;无法使用这些新的库。Python 3在设计上着重提升了语言的一致性和易用性&#xff0c;它引入了许多关键改进&#xff0c;此外&#xff0c;Python 3环境拥有丰…

Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析

3.2 自动配置 我们讲解了SpringBoot当中起步依赖的原理&#xff0c;就是Maven的依赖传递。接下来我们解析下自动配置的原理&#xff0c;我们要分析自动配置的原理&#xff0c;首先要知道什么是自动配置。 3.2.1 概述 SpringBoot的自动配置就是当Spring容器启动后&#xff0c…

项目-SERVER模块-Buffer模块

Buffer模块 一、Buffer模块是什么&#xff1f;实现思想是什么&#xff1f;二、代码实现如何设计&#xff1a;1.成员变量&#xff1a;2.构造函数&#xff1a;3.获取地址和空间大小4.读写偏移向后移动5.扩容函数6.写入函数7.读取函数8.获取地址和空间大小9.获取地址和空间大小10.…

springboot自写插件封包

在Spring Boot中自写插件或封包&#xff08;通常指的是创建自定义的starter&#xff09;是一种常见的做法&#xff0c;用于将一系列相关的配置和组件打包成一个独立的模块&#xff0c;从而简化依赖管理和配置过程。以下是一个简单的步骤&#xff0c;指导你如何创建一个自定义的…