性能测试知识之三大模型

news2024/11/27 6:16:20

今天的这篇文章我会聊聊在实际工作中开展性能测试,前期最核心的工作。即业务模型、流量模型和数据模型这三大模型,该如何评估和建立。


在性能测试工作中,业务模型、流量模型和数据模型是至关重要且必须在项目中构建的,否则很可能导致测试的场景和实际差距很大,测试结果也无法为性能分析和优化提供足够有说服力的支撑。

为了便于大家理解三大模型,我会以电商业务下单的场景来举例说明,如下图:



业务模型

大家可以将业务模型看作功能测试中的业务场景。在性能测试中要构建业务模型,我们要考虑如下几个因素:

  1. 商品库存是否足够;

  2. 下单的商品是否可参与营销活动;

  3. 下单的用户是否是vip会员,有会员折扣;

  4. 下单的用户是否有优惠券,该优惠券是否满足本订单的优惠条件;

............

其实业务模型和功能测试时候的业务场景分析没什么区别,都是为了针对被测业务和服务进行分析,确保测试的场景和需求是一致的。

如果是更复杂的业务和更大范围的测试需求,可能还要考虑线上业务的流量入口、风控等因素。

当然在实际的工作或项目中,建议通过分析需求,梳理出压测涉及到的业务和场景,绘制成一个业务模型思维导图,这样便于后续的工作开展。

业务模型思维导图可以用树状图也可以用类似上图的样子,便于理解即可。

流量模型

我们都知道,性能测试执行压测时,都是基于接口或某个URL来进行的。本质是模拟生产环境的用户,构造请求对被测系统施加压力,验证系统性能是否满足业务需要,是否存在性能瓶颈。

生产环境的用户操作场景是很复杂的,所以请求的大小和请求路径也各不一样。

下单时候有些用户使用了优惠券,有些用户不是vip会员无法享受折扣,有些商品没有营销活动。这些因素要求我们在构造请求时,需要按照不同的业务场景构造不同的请求。

所谓的流量模型,其本质是按照业务场景的不同将请求按照真实的比例进行配置,也称之为业务配比。

大家也可以将流量模型理解为压测模型,工作中常见的压测模型有如下几种:

单机单接口基准测试

基准测试最常见的就是对登录场景进行压测。

单机单接口的压测,可以通过梯度递增的方式,观察随着请求的增加,其性能表现&资源损耗的变化。

单机混合链路容量测试

订单服务包含创建订单、取消订单、订单列表、订单详情等接口。

每个接口的请求量大小、请求内容各不相同。单机混合场景,大多通过梯度增加请求的方式,观察服务级别的性能表现,目的是排查上下游调用依赖的瓶颈。

生产环境全链路压测场景

针对生产集群的全链路压测,常见的案例就是双11电商大促。生产全链路压测模型较多,一般有如下几种:

· 梯度加压:为了探测集群模式下系统的最大吞吐量(避免压垮服务,造成事故);

· 固定并发:验证系统长期处于负载下的稳定性;

· 脉冲并发:探测系统的健壮性、验证限流熔断等服务保护措施的正确性&可用性;

· 超卖验证:对电商业务来说,主要针对一些限时抢购&秒杀的场景(一般这种场景,会涉及到分布式锁、缓存、数据一致性等技术点;玩不好的话,容易造成客诉、资损、甚至服务异常宕机!)。

构建流量模型

下面是之前我实际工作中一次双11大促时的流量模型构建案例,仅供参考。

业务目标:双11当天,预估平均客单价为500,单日GMV为10亿,那么支付订单量为10亿/500=200W。
技术指标:

假设日常支付订单量为50W,支付转化率为40%,订单支付QPS峰值为200。预估大促时的支付转化率为60%,则可得:大促峰值订单支付QPS为(200/40%)*60%*(200W/50W)=1200QPS。为了留有一定冗余空间,上浮30%,即订单支付的QPS预估为1500。

电商的导购下单支付链路为:首页→商品详情→创建订单→订单支付→支付成功,这是类似漏斗的一个转化逻辑。假设首页→商品详情转化率为40%,商品详情→创建订单转化率为40%,创建订单→订单支付转化率为40%,那么可得:创建订单QPS为1500/40%=3750,商品详情QPS为3750/40%=9375,首页QPS为9375/40%=23437。

按照核心链路之间的依赖调用关系,借助trace追踪,可得到大促期间所有核心应用及核心链路的QPS数值。

建议评估后流量模型后,结合业务场景和服务间的调用关系,绘制成一个流量模型图,这样会更直观,便于工作开展。

数据模型

了解了业务模型和流量模型后,数据模型就很好理解了。
以上图为例,电商下单业务在构建数据模型时,要根据压测时常、压测次数和压测场景,准备不同类型的数据。

在准备数据时,还要考虑数据的有效性、数据量级、数据的组合逻辑关系以及数据是否符合生产环境的数据分布等情况。

如果测试过程中采用的数据不准确,那测试结果往往出现较大偏差。关于测试数据模型构建,可参考如下几点:

基础数据

也称为铺底数据,铺底数据目的是与线上保持一致(至少数量分布一致),再结合线上增长率,确认预埋数据量级及预埋方式。

涉及到压测时需要校验的数据,需要在铺底的时候就要精细化的设计,包括数据大小、数量、分布。

热点数据

需要了解被测接口的实现逻辑,确认以下信息:

·是否有热点数据相关的操作:比如说所有用户秒杀同一件商品;

· 不同类型数据处理逻辑有差异时,需通过测试数据多样化提高性能测试代码覆盖率;


缓存数据

要确认是否有缓存,缓存大小。

秒杀抢购相关数据,一般来说都是进行队列处理,将该类型数据放入缓存中进行处理来应对高并发。

再比如用户登录所需的token等数据,在压测时,可以提前将构造好的数据预热到缓存,避免压测时用户服务成为瓶颈。

构建数据模型

构建数据模型的目的,最直观的就是压测时候的测试数据参数化。一般构建步骤如下:

·构建业务模型;

· 构建流量模型(压测模型);

· 罗列出业务和流量模型所需要的测试数据以及对应关系;

· 将准备好的参数化数据从数据库取出来生成对应的不同的参数化数据文件;

· 在压测脚本中设置对应的数据匹配关系,保证业务模型、流量模型和数据模型匹配,模拟生产真实场景。

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

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

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

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

相关文章

【算法分析与设计】【期中(末)复习题】【2022秋】

文章目录一. 单选题二. 填空题三. 判断题四. 多选题一. 单选题 1.按照渐近阶从低到高的顺序排列下列表达式&#xff1a; 30n&#xff0c;2logn&#xff0c;4&#xff0c;n! A. 4<30n<2logn<n! B. 30n<4<2logn<n! C. n!<4<2logn<30n D. 4<2logn&…

YOLO算法改进之结合GradCAM可视化热力图(附详细教程)

🎄🎄YOLOv5/v7改进之结合GradCAM可视化热力图(附详细教程)🎄🎄 🚀🚀🚀NEW!!!魔改YOLOv5/v7目标检测算法来啦 ~ 🐱‍🏍 计算机视觉 —— 致力于目标检测领域科研Tricks改进与推荐 | 主要包括主干网络改进、轻量化网络、注意力机制、检测头部改进、空间金…

主数据管理(MDM),数据中台,国内有哪些知名供应商呢?

当企业的信息化、数据化发展到一定阶段的时候&#xff0c;大部分企业都会对主数据管理产生需求。为帮助企业加速数字化建设步伐&#xff0c;亿信华辰凭借多年在行业领域内积累的丰富经验并结合相关大数据技术成功打造了一款主数据管理产品&#xff0c;覆盖主数据标准、主数据质…

019 | 探究布衣上的刺绣图腾文化功能——以贵州册亨县布依族刺绣为例 | 大学生创新训练项目申请书 | 极致技术工厂

研究目的 当今我国社会的主要矛盾是人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾。但经济增长过快所带来的联动效应&#xff0c;导致人们一定程度上只注重金钱、利益&#xff0c;从而忽视了培养高尚的理想信念和增强民族精神的重要性。社会要保持平衡性&#xff…

基于低代码平台设计的订单管理系统,助力家具行业信息化建设

编者按&#xff1a;随着信息化的高速发展&#xff0c;传统的人工订单管理模式已经不适合现在企业发展的需求&#xff0c;一个成熟的订单管理系统可以帮助企业解决订单管理混乱的问题。本文介绍了低代码平台在订单管理系统实现方面的优势&#xff0c;并展示了相关案例。 关键词…

PE文件详解

字节存放顺序是小尾存储&#xff0c;高位保存高字节、低位保存低字节&#xff0c;因此是两位两位倒着读 1、DOS头&#xff1a;包括MZ头和DOS存根&#xff0c;指向DOS可执行程序部分 &#xff08;1&#xff09;MZ头&#xff1a;长度 40H&#xff0c;即4行乘16位&#xff0c; e_…

mmap

文章目录使用示例函数原型mmapmunmap传统读写文件mmap 原理eager实现lazy实现缺点使用示例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h>int main(i…

高并发编程之阻塞队列

9 阻塞队列 9.1 BlockingQueue 简介 Concurrent 包中&#xff0c;BlockingQueue 很好的解决了多线程中&#xff0c;如何高效安全 “传输”数据的问题。通过这些高效并且线程安全的队列类&#xff0c;为我们快速搭建 高质量的多线程程序带来极大的便利。本文详细介绍了 Bloc…

十四、JavaScript——类型转化_数值

一、定义 将其他的数据类型转化为数值 使用Number()函数来将其他类型转化为数值&#xff0c;适用于任何类型使用parseInt() -- 将一个字符串转化为一个整数 -解析时&#xff0c;会自作向右读取一个字符串&#xff0c;直到读取到所有的整数位 parseFloat()…

想学设计模式、想搞架构设计,先学学 UML 系统建模吧

UML 系统建模 1 概述 1.1 课程概述 汇集 UML 及其相关的一些话题回顾 UML 相关的符号与概念以电商订单相关业务为例&#xff0c;借助 UML 完成系统建模将 UML 变成提升建模效率&#xff0c;表达架构思想的工具 1.2 什么是 UML ​ Unified Modeling Language 统一建模语言&a…

MEMS运动传感器:三轴数字输出陀螺仪——L3GD20

一、框图和引脚说明 二、机械和电气规格 三、应用 四、数字框图 4.1 框图 4.2 FIFO L3GD20为三个输出通道(偏航、俯仰和滚转)分别嵌入了32个16位数据FIFO槽。 五种模式&#xff1a;Bypass mode、FIFO mode、Stream mode、Bypass-to-Stream mode and Stream-to-FIFO mode。 …

ICG-Amine|ICG标记氨基|ICG-NH2

ICG-Amine|ICG标记氨基|ICG-NH2 中文名称&#xff1a;ICG标记氨基英文名称&#xff1a;ICG-Amine 分子式&#xff1a;C47H56N4O4S 分子量&#xff1a;773.04 外观&#xff1a;绿色粉末 溶解度&#xff1a;二氯甲烷 纯度&#xff1a;95% 结构式&#xff1a; Indocyanine …

JUC并发编程第十二篇,详解Synchronized与锁升级

详解Synchronized与锁升级一、概述二、Synchronized 版本升级优化与锁对象1、版本变化2、为什么每一个对象都可以成为一个锁&#xff1f;三、Synchronized锁升级步骤详解1、如何升级&#xff1f;2、无锁&#xff0c;不会出现竞争3、偏向锁4、轻量级锁5、重锁6、三种锁的比较四、…

接口测试实战 | Android 高版本无法抓取 HTTPS,怎么办?

image1080327 43.8 KB 【编者按】本文为霍格沃兹测试学院 yuye 同学的接口测试实践笔记。 在接口测试中&#xff0c;相信很多人都遇到过 Android 高版本&#xff08;Android7.0 以上&#xff09;系统无法抓包的问题。 由于在测试过程中对分析定位问题很不方便&#xff0c;所以…

Solidity地址支付方法Send、Transfer和Call的使用

以上三种转账方式都属于地址的成员属性&#xff08;members of address&#xff09;。 参见地址成员类型 Transfer 如果当前合约的余额不够大或者 Ether转账被接收账户拒绝&#xff0c;转账功能将失败。接收方智能合约应定义回退函数&#xff0c;否则转账调用将引发错误。tr…

以生态共建促产业发展,点亮HPC新未来

作者 | 曾响铃 文 | 响铃说 作为IT行业的“明珠”&#xff0c;极“硬核”的高性能计算不如云计算、AI、物联网技术备受关注。但不可忽视的是&#xff0c;近年来&#xff0c;高性能计算正在从高精尖科研加速迈向千行百业&#xff0c;成为推动数字经济发展的新引擎。在近日举办…

springboot - 原理初探

自动配置&#xff1a; 1、pom.xml &#xff08;1&#xff09;sping-boot-dependencies&#xff1a;核心依赖在父工程中&#xff01;&#xff01;&#xff01; &#xff08;pom.xml文件中&#xff0c;spring-boot-starter-parent 点进去&#xff0c;然后&#xff0c;spring-…

C51 - 准双向I/O口结构

Contents1> P1口1.1> 写 "0" 过程1.2> 写 "1" 过程1.3> 读引脚”准“双向问题&#xff1a;1.4> 读 寄存器2> P3口3> P0口1> P1口 没画【P1.0/T2】【P1.1/T2EX】第2功能&#xff1b; 1.1> 写 “0” 过程 D触发器FF1&#xff0c;…

ssm+Vue计算机毕业设计校园新闻发布系统(程序+LW文档)

ssmVue计算机毕业设计校园新闻发布系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

微信小程序-视图与逻辑

文章目录1. 页面导航2. 导航传参3. 下拉刷新4. 上拉触底5. 自定义编译模式6.生命周期7. wxs脚本1. 页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现页面导航的方式有如下两种&#xff1a; 声明式导航 在页面上声明一个<navigator>导航组件通…