性能测试相关理解---性能测试流程(二)
六、性能测试流程(如何做性能测试?)
根据学习全栈测试博主的课程做的笔记
1、前期准备–
项目初期就开始,业务需求评审时尽量参与,对业务更深刻的认识(确定哪些是核心业务、哪些可能存在并发请求、确定什么地方会出现瓶颈,方便后续性能需求评审时给出建设性建议)
2、性能需求分析、评审(确定性能测试的范围、性能测试的目标是多少)
2.1、确定范围:哪些业务接口
使用多的、核心业务功能
2.2、目标:tps、rt、成功率、资源利用率等
2.3、补充
2.3.1关于需求来源(项目组一起定性能目标)
2.3.1.1迭代项目
1)范围
新增、修改、受影响的功能也是需要放在压测范围内
2)目标
不能低于之前版本的性能
还需要进行容量评估,根据历史数据的请求数据进行统计月增长率是多少
比如现在要做一个容量预估:可以根据增长率(业务、用户增长的情况)预估tps达到多少未来才能满足业务需求,就可以做容量预估
3)业务比例:类似ELK的日志平台来统计
从生产上统计接口的业务比例(其实就是单接口的比例)
这只是统计出接口的比例,但是需要转换成业务比例,评审时就需要将业务比例获取到,最后在jmeter设计场景时要用到。
2.3.2新项目
1)范围:核心业务功能
2)目标值:参考竞品、经验值(产品经理)
若是迭代项目可以和之前的版本性能做对比,也可以通过生产环境的统计日志获得容量tps,新项目就是参考竞品和产品经理的经验。
3)补充:①业务比例(项目组谈论、项目运行后统计)②要测出最大容量Tps,为上线后限流提供参考
迭代项目的业务比例是可以通过类似ELK日志平台拉取数据,看一下压测时间范围内各个接口请求的压测业务比例历史数据统计,新项目没有历史数据,怎么解决?
这种新项目的业务比例只能是项目组进行讨论(不好定的情况,最简单的就是1:1或者就是项目试运行后数据统计比例,少量用户和大量用户使用的tps有差异,业务比例的1偏差不是太大。
对于新项目,一定需要测出最大容量tps,为上线后限流进行提供参考。
3、制定性能测试方案(为后续工作进行指导)
方案很重要(设计相关的、数据的设计、场景的设计、监控的设计等)
3.1、项目背景
描述项目做什么、核心业务什么、出现什么问题,系统架构(用到什么技术栈)
1)背景描述
2)系统架构
了解系统架构、用到什么技术栈、接口的的数据流向、经过了哪些技术栈,才能为后续设计监控提供参考(才知道去监控哪些服务)
3)压测目的
解决当前什么性能问题、还需要测试出系统的最大容量tps(为上线后续的保证服务不挂、限流等)
3.2、术语说明(主要为了避免理解偏差)
1)tps
2)rt
3)并发
4)业务比例
5)单场景
6)容量场景(混合场景)
7)稳定性场景
3.3、测试范围、目标
1)要压测的接口清单以及业务比例
2)各个场景的目标:tps、rt、成功率等
3.4、测试资源
1)人力资源(组织架构)
项目经理(协调压测需要的资源)
性能测试工程师(编写性能测试方案、性能测试脚本、设计压测场景、执行压测、收集监控数据、编写测试报告等)
开发工程师(开发需要配合性能测试进行打对应的压测分支、做性能分析、做性能优化)
运维工程师(配合性能测试部署压测测试环境、协助性能部署测试监控)
2)压测工具(主要是压力端的工具)
jmeter还是loadrunner
压力机(window、linux)
如果对性能要求不高,用window压力机即可,一般用的是linux
3)压测环境:
硬件、软件、部署描述清楚
3.5、压测设计(最重要)
1)数据设计
①参数化数据—数据量–根据业务来
唯一性:tps500,压测时间600s,至少需要30000数据量乘以20%,
非唯一性:tps500,也是时间600s,至少覆盖线上时间被使用到的
如:注册要用不同的用户名,系统要求用户名是唯一,就需要准备不同用户名。
模拟不同的真实用户,发送请求。
参数化数据设计多少?得根据业务来,对数据有唯一性。
若要求tps=500,压测时间10分钟,600s,至少需要30000数据量,但是压力端在发送请求时,不是轮流发请求,假设起了200个线程,jmeter线程关系之间也是有竞争关系,也是要去争夺cpu的执行权限。如果获得cpu的执行权限,就将请求发送出去,可能有的线程获得cpu执行权限多一点,发的请求数也会多,jmeter数据量把,一部分数据分成线程1,线程2,线程3,获得cpu的执行权限不一样,为了避免发的请求更多数据量不够,再算出的数据量再乘以20%或者更多
对数据若没有唯一性。如查询商品,a\bc都可以查询到电脑,商品表有10万个商品,数据量应该设置多少?假设tps=500,压测时间10分钟,600s,至少需要30000数据量,商品表里有10万数据,可以直接用,也可以直接统计线上某一段时间内哪些商品被搜索,再进行参数化,需要与线上覆盖到(实际被使用到的数据)
参数化唯一性数据需要自己造
非唯一性数据在库里存在,若想所有数据都需要参数化数据导出,若想拿某一些热点数据进行参数化,就需要统计线上日志。
②数据库存量
数据库里各个表都存有数据,测时的数据库量级与生产一致,方便复现线上回归压测复现问题,变量太多,尽量保持与生产一致(数据量级、环境差异、软硬配置)
数据库的表和生产量的数据库表的尽量保持一致
2)场景设计(单场景、容量场景、稳定性场景等)
①单场景
单个业务接口进行压测
生产环境有很多的业务功能,一般说系统的tps都是混合容量的tps,为什么还需要对单场景进行压测?单个接口,链路简单,可以发现明显的性能Bug,可以为后续混合场景tps参考(代码逻辑性能Bug、软件配置bug如数据库连接配置,应用代码线程池里的配置)
②容量场景(混合场景)
容量场景一定需要集合业务比例模拟线上真实业务场景,在性能需求评审时不仅要给到目标tps,还需要给到业务比例,因为线上环境,每个接口调用次数不一样。
涉及到有用户登录、查询商品、添加购物差、创建订单接口:若对这些业务做单场景测试,这四个接口就属于压测范围。
单场景就是针对每一个业务(单独的接口)去进行单独指定目标、设计到加压方式、表的数据量,脚本涉及到关键点,以及重点关注相关指标
根据图中的单场景的目标tps是300、500、500、200,一般性能测试中给出的tps都是混合容量的tps。
混合容量tps=800,接口业务占比,可以根据业务比例算出在混合容量场景各个接口的tps。创建订单 业务比例10%,总的tps是800,则创建订单接口的tps为800*10%=80
其他接口也是同样算法:根据混合容量总的tps算出各接口在混合容量场景下的tps
单场景若没有指定目标tps,接口的目标tps至少是需要比混合容量场景中各接口的tps高(有的项目组会告诉单场景的tps,有的项目组则不会告诉单场景的tps,不指定的话根据总混合容量场景tps和业务比例是可以进行算出每个单接口的tps需要达到多少)
图中的业务比例是日志平台统计业务峰值容量tps,分解出来各个接口的比例,在jmeter中设置的时候还需要进行转换(吞吐量控制器)
业务占比用户登录15%,查询商品40%,添加购物车35%,创建订单10%,根据日志平台线上系统进行统计(有并发请求的业务的一个量,后面再根据jmeter的吞吐量控制器进行业务比例转换)
③稳定性场景(防止系统在高峰值时挂)
压测时需要设置一个持续时间,jmter中,循环次数勾选永远,会设置一个持续时间
稳定性压测时间设置多少合理?jmeter中,tps=总请求数/并发时间
并发时间=总请求数/tps
5000万/800=62500s–建议,时间乘以120%
50000万/1000=50000s,建议:时间乘以120%(防止跑到后面后,性能下降后,没有达到5000万的业务量)
稳定性场景的tps用的是混合容量场景测试出来的最大tps1000,用更大的tps跑出更少的时间。
④加压方式
秒杀、抢购----瞬间产生压力
非秒杀、抢购-----逐步阶梯加压
3)监控设计
根据压测接口的链路涉及的技术栈、选择合适的监控工具
比如:链路监控工具是微服务的标配(服务很多,排查问题难)
java项目:通过链路监控工具,进行时间拆分,发现是应用耗时多(对应用接口的调用的方法,通过arthas之类工具看哪个是方法耗时多或者可能是jg在耗时,通过jdk自带的相关命令进行查看,jstack)
系统架构、数据流向、技术栈需要清楚
3.6、测试计划
流程的一个里程碑计划、产出物什么、时间节点、负责人是谁?
3.7、风险评估
根据当前情况罗列出可能的风险(如涉及到外围系统,外围系统也属于外围风险、人力资源缺少、环境差异)
3.8、参考资料
4 、性能测试方案评审
写好后项目组进行评审、性能测试计划、性能测试场景怎么设计的.
根据评审会议的建议进行修改
评审会议通过后需要发送给各项目组的成员
5、申请性能测试环境
简单架构(nginx+2 tomcat +mysql),nginx做反向代理,tomcat容器有两个+mysql,看哪一个服务是影响大的,资源不足的话,对对应的服务等比例缩放进行两次压测,看损耗率。
初步判断,瓶颈在应用层,第一次是一个tomcat,tps是100,两个tomcat的tps是180,此处有20的tps的损耗。换算成损耗率,生产是3个tomcat,预估可以达到多少tps,现在简单架构较少,一般都是复杂架构,复杂架构链路长,涉及的服务多,每一个服务的影响因子性能大小不一样,很难换算。建议项目组进行评估,做好线上的保护,如限流。
大公司一般压测环境不足,一般是直接线上全链路,充分利用线上的资源。
补充:新项目可以直接在线上环境压测
6、性能测试用例编写及评审
性能测试用例设计:一般是对性能测试场景进行设计
对单场景、混合容量场景、长时间稳定性的设计,重点就是各场景里的数值
单场景(目标tps、加压方式、数据量、脚本设计等)混合容量场景(业务比例、目标tps等)
长时间稳定性(总的压测时间、总的目标业务量等)
7、搭建测试环境
参考测试资源压测环境的部署
除了部署应用,还需要部署监控
8 、准备测试脚本、测试数据
8.1、脚本
推荐:开发提供压测环境调通的postman或者jmeter脚本
或者根据接口文档写(swagger)
8.2、场景设计
8.3、准备数据
1)参数化数据
方式,代码生成,从数据库导出
2)数据库存量数据
方式:
复杂表,jmeter跑业务接口
单表:代码,存储过程
9、环境确认测试
9.1、静态测试
确认环境配置(软件、硬件),尽量和生产保持一致
软件(jdbc的配置、线程池的配置等是否和生产保持一致)
9.2、非静态测试
确认环境是否可用(压测的接口是否通、发送请求是否有响应响应结果是否正确等)
10、执行压测并监控
先单场景测试发现明显的性能bug,为容量场景做准备
混合容量场景:模拟真实线上的真实场景
再执行稳定性场景
执行压测监控时,不要一次性打开所有监控,监控也是需要耗费监控资源。先通过jmeter非gui模式下持续阶梯加压跑一下,看一下结果,如不达标后,若是微服务(用skywalking)是哪一个节点耗时多,就着重监控不达标的节点(如果是mysql服务,则将mysql的服务打开),通过mysql监控看是什么问题,若有慢sql,后续就需要出现问题的接口执行的sql,拿出来用explain单独分析sql执行情况
每一步需要哪个监控就开哪个监控
11、分析定位
11.1方法
1)简单架构
查看资源消耗,通过监控发现应用服务器的CPU高,java项目可以进行打栈,看一下线程在做什么,下一步就是代码逻辑。
2)复杂架构
通过分解时间方式(微服务skywalking)
举例:
场景比对:加节点怀疑是服务资源不足,可以进行加节点,
性能提升后就是服务资源不足导致的,服务为什么消耗资源,代码逻辑是否合理。
隔离:这个功能会调另一个功能,先将一个功能去掉后再进行压测。
12、性能优化
13、性能回归
14、编写性能测试报告
14.1、测试过程详情以及对应的分析
14.2、测试问题总结及建议
14.3、问题汇总
14.4、风险评估
14.5、优化清单
相关文章:

性能测试相关理解---性能测试流程(二)
六、性能测试流程(如何做性能测试?) 根据学习全栈测试博主的课程做的笔记 1、前期准备– 项目初期就开始,业务需求评审时尽量参与,对业务更深刻的认识(确定哪些是核心业务、哪些可能存在并发请求、确定什么地方会出现瓶颈,方便后…...

GD32 MCU ADC采样率如何计算?
大家在使用ADC采样的时候是否计算过ADC的采样率,这个问题非常关键! 以下为GD32F303系列MCU中有关ADC的参数,其中ADC时钟最大值为40MHz,12位分辨率下最大采样率为2.86MSPS.如果ADC时钟超频的话,可能会造成ADC采样异常&…...

.mkp勒索病毒:深度解析与防范
引言: 在数字化时代,网络安全问题日益严峻,其中勒索病毒作为一种极具破坏性的恶意软件,严重威胁着个人用户和企业机构的数据安全。在众多勒索病毒家族中,.mkp勒索病毒以其强大的加密能力和广泛的传播方式,成…...

5.opencv深浅拷贝
图像处理的复制操作 深浅拷贝 图像复制分成两种,第一种假复制,从原图片选择一部分图片拿出来观察,此时新生成的图片和原图实际上是同一张图片,即浅拷贝 将图片的一部分复制下来,放到新的内存中,即两张完全…...

C++11中新特性介绍-之(二)
11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…...

STM32实现看门狗(HAL库)
文章目录 一. 看门狗1. 独立看门狗(IWDG)1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗(WWDG)2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG,而导致芯片无法正常工…...

【漏洞复现】网络摄像头——弱口令
声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1)信息…...

视觉图像面积计算
在图像处理和计算机视觉中,计算对象面积的常见方法有两种:使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法: 优点: 简单易实现。能够处理带有孔洞的复杂区域(只要孔洞不影响连…...

Vue笔记10-其它Composition API
shallowReactive与shallowRef shallow:浅的,和deep相反 shallowReactive:只处理对象最外层属性的响应式 shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理 如果有一个对象数据,结构比较深&a…...

AI集成工具平台一站式体验,零门槛使用国内外主流大模型
目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…...

北京交通大学学报
《北京交通大学学报》是经新闻出版广电总局批准,由教育部主管,北京交通大学主办的自然科学理论与技术类学术期刊。学报致力于全面反映交通运输和信息与通信领域相关学科的最新研究进展。主要刊登交通运输工程、系统科学、信息与通信工程、控制科学与工程…...

【LinuxC语言】手撕Http之处理POST请求
文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…...

以软件定义推动智算中心建设
2024 年 6 月 27 日,由益企研究院和 CDCC 主办、OCTC 开放计算委员会协办、隆高展览承办的"2024 中国智算中心全栈技术大会、第 5 届中国数据中心绿色能源大会暨第 10 届中国(上海)国际数据中心产业展览会”在上海圆满结束。本次大会以&…...

Apache Seata分布式事务原理解析探秘
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fesca…...

MySQL-18-mysql source 执行 sql 文件时中文乱码
拓展阅读 MySQL 00 View MySQL 01 Ruler mysql 日常开发规范 MySQL 02 truncate table 与 delete 清空表的区别和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情与 UTF8MB4 的故事 MySQL 05 MySQL入门教程&a…...

flutter环境安装(Mac+vscode)
以前据说flutter跨平台开发app很牛逼,最近突然想到这个东西,于是想体验一下flutter的开发流程,看看能否适合做独立开发。 我用的是mac,手机也是ios,就开始着手部署mac下的开发环境了。 开发后台的时候,一…...

【题解】—— LeetCode一周小结27
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结26 2024.7 1.最大化一张图中的路径价值 题目链接:…...

C++后端开发--网络编程基础
目录 一、网络编程基础概念 1.1 网络协议 1.2 IP地址和端口号 1.3 Socket 1.4 TCP协议的三次握手和四次挥手 TCP的三次握手 TCP的四次挥手 整个流程更通俗易懂 TCP 三次握手流程图 TCP 四次挥手流程图 1.5 详细介绍一下http协议 HTTP协议的主要特点 HTTP请求 HTT…...

如何将资源前端通过 Docker 部署到远程服务器
作为一个程序员,在开发过程中,经常会遇到项目部署的问题,在现在本就不稳定的大环境下,前端开发也需要掌握部署技能,来提高自己的生存力,今天就详细说一下如何把一个前端资源放到远程服务器上面通过docker部…...

@react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度
1.第一步要加入项目package.json中或者直接yarn install它都可以 "react-google-maps/api": "^2.19.3",2.加入项目中 import AMapLoader from amap/amap-jsapi-loader;import React, { PureComponent } from react; import { GoogleMap, LoadScript, Mar…...

【MySQL】2.库的操作
库的操作 一.创建数据库1.数据库的编码集 二.查看数据库三.修改数据库四.删除数据库五.数据库的备份和恢复 一.创建数据库 create database [if not exists] db_name [charsetutf8] [collateutf8_general_ci] //创建一个名为db_name的数据库,本质就是在/var/lib/my…...

深入Laravel服务容器:构建灵活应用的秘诀
标题:深入Laravel服务容器:构建灵活应用的秘诀 Laravel框架的服务容器是一个强大的工具,它负责管理类的依赖关系和执行依赖注入(DI)。服务容器是Laravel依赖注入系统的核心,使得应用组件之间的耦合度降低&…...

3.js - 模板渲染 - 金属切面效果
md,狗不学,我学 源码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.m…...

【测试】系统压力测试报告模板(Word原件)
系统压力测试,简而言之,是在模拟高负载、高并发的环境下,对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现,包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试,开发团队能够…...

图片预加载和懒加载
图片预加载 图片预加载是指在页面展示之前提前加载即将使用到的图片资源,以便当用户需要查看时,能够直接从本地缓存中快速渲染,从而提高页面加载速度和用户体验。 原理 图片预加载通过提前将图片下载到浏览器缓存中,当用户实际…...

Java中的数据可视化与图表库选择
Java中的数据可视化与图表库选择 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代软件开发中,数据可视化是将抽象数据转化为易于理解的图形化…...

STM32-TIM定时器
本内容基于江协科技STM32视频内容,整理而得。 文章目录 1. TIM1.1 TIM定时器1.2 定时器类型1.3 基本定时器1.4 通用定时器1.4 高级定时器1.5 定时中断基本结构1.6 预分频器时序1.7 计数器时序1.8 计数器无预装时序1.9 计数器有预装时序1.10 RCC时钟树 2. TIM库函数…...

Python OpenCV与霍夫变换:检测符合特定斜率范围的直线
在计算机视觉和图像处理领域,检测图像中的直线是一项常见且重要的任务。OpenCV 提供了许多强大的工具来进行图像处理,其中霍夫变换(Hough Transform)就是用于检测直线的经典方法。本文将介绍如何使用 OpenCV 和霍夫变换来检测图像…...

ubuntu22.04+pytorch2.3安装PyG图神经网络库
ubuntu下安装torch-geometric库,图神经网络 开发环境 ubuntu22.04 conda 24.5.0 python 3.9 pytorch 2.0.1 cuda 11.8 pyg的安装网上教程流传着许多安装方式,这些安装方式主要是:预先安装好pyg的依赖库,这些依赖库需要对应上pyth…...

新型开发语言的试用感受-仓颉语言发布之际
经常听一些媒体介绍一些新型的开发语言,所以最近心血来潮,安装了几种感受了一些。 先看名气,如ziglang,网址为:Home ⚡Zig Programming Language 号称是可以取代C语言的一门新语言,其实我主要是受下面这篇…...