【软件测试】学习笔记-性能测试场景的分类

news2024/12/24 21:58:07

性能测试场景的重要程度类似于业务测试的 case,case 是你进行业务测试的指引,case 是否完善也直接决定了测试的覆盖率。同理,场景是传递执行性能测试的步骤和目的,关于这两点是你一定要清楚的。

首先认识下最重要的三个性能场景:基准场景单接口负载场景混合场景负载测试,这几个场景也是经常说的“基石场景”。接下来讲解这三个场景是怎么操作,以及核心目的是什么?

基准场景

基准场景是指单线程或者少量线程(一般在 5 个线程以下)对单接口进行测试,然后将测试结果作为基准数据,在系统调优或者评估的过程中,通过运行相同的业务接口比较测试结果,为系统的优化以及后续测试流程提供决策数据。

有人觉得基准测试并不是在高并发下进行的,不算是性能测试,但我认为这其实是性能测试中重要的基础步骤,它有以下作用:

  • 验证测试脚本及测试参数的正确性,同时也可以验证脚本数据是否能够支持重复性测试等;
  • 通过少量线程访问系统获取结果数据,作为对比参考基准;
  • 根据测试结果,初步判断可能成为系统瓶颈的场景,并决定是否进行后续的测试;
  • 基准场景的结果被一部分公司作为上线的基线指标,不达到要求是不允许上线的,这样的场景也经常被固化成自动化的脚本定时触发和巡检。

单接口负载场景

单接口负载场景就是通过模拟多线程对单接口进行负载测试。我的具体做法是选定线程数后持续循环运行一定时间,比如分别运行 100 线程、200 线程、300线程等,一般相同线程数运行 10~15 min,然后获取事务响应时间、TPS、报错率,监测测试系统的各服务器资源使用情况(CPU、内存、磁盘、网络等),把具体数据记录之后再开始跑下一个线程数。每一组线程数级别会有对应的 TPS,直到你找到 TPS 的拐点。如下图所示,横坐标是线程数,纵坐标是 TPS,线程数增加到 400 时出现了拐点。

需要注意的点有两个。

  • 使用工具做性能测试时,动辄就是上千的线程数,所以如果你是一位初学者,我更加倾向于你从一个相对比较低的线程数梯度增加,这样才能够比较清晰地找到 TPS 的拐点。
  • 我还建议为每个虚拟用户级别做单独的场景,网上绝大部分的教程,在一个场景中做了很多梯度(如下图所示),这样只是看上去简单方便一些,其实很不利于分析和诊断,这个方式我并不推荐。因为并不是每一个量级的性能表现都是类似的,而且一个场景多梯度出来的报表也可能没你想象中的清晰明了。在 JMeter 的聚合报告中还会将结果数据平均化,这样的方式并不能准确地记录每个线程梯度对应的 TPS。而在一个场景里先固定虚拟用户可以将自己的精力聚焦在诊断上。

混合场景负载测试

混合场景是性能测试中最重要的场景之一,这个场景是为了最大程度模拟用户真实的操作。真实的线上操作不只有单接口的操作,一定是多种业务同时在进行,比如张三在浏览商品,李四在添加购物车等。

所以混合场景测试会将多个接口按照实际大促时候的比例混合起来,然后增加线程数找出多个接口 TPS 的和对应的峰值。这个比例也是混合场景的关键,在[《07 | 你真的知道如何制定性能测试的目标吗?》]中已经较为详细地阐述了制定比例的方法,本讲就不再赘述。加用户运行的基本策略可以参考上文的单接口负载测试。混合场景执行除了要观察总的 TPS,还有一个非常关键的因素就是如何控制接口之间的调用比例,使其不能偏离预期。

如何使用 JMeter 去控制场景比例?

相信你已经知道线程数可以改变接口的 TPS,但是如果每次通过线程数调整这个过程会比较烦琐。JMeter 提供了一个能较好地解决这个问题的插件,叫作吞吐量控制器,它在逻辑控制器组件中,如下图所示:

我来简单介绍一下这个插件配置规则,默认的情况下使用的是百分比模式,也就是 Percent Excutions。吞吐量一栏对应的是 TPS 占比,我用 login 和 register 这两个接口来模拟下,

login 接口配置比例是 80%,如下图所示,剩下的 20% 配置给 register。

看下运行后的效果,可直接在 JMeter 中添加聚合报告元件,如下图所示:

实际计算下来的值为 1778.2⁄2222.7≈0.8,这个数据是比较准确的。

以上是我所说的基石场景,包括基准测试、负载测试、混合场景测试等,这三个场景是有依次执行的顺序关系的,按照顺序执行更容易发现问题且减少不必要的工作,比如你连基准测试都不通过,就没有必要进行负载测试了。所以我们在做每一次性能测试时,都不应该省去或者颠倒上述的场景步骤。

接着我带你继续学习其他性能测试场景,为了达到相对应的性能测试目的,这些场景可以根据需求进行选择。

异常性能测试

性能测试也是存在异常测试的,顾名思义就是在系统异常的情况下看系统的处理能力或者是通过处理后的恢复能力是如何的。

比如在架构的高可用方面,遇到服务的上下线、数据库的主从切换等这些情况的时延是多少、处理能力能不能达到预期标准。另外在目前的电商应用架构中,大促遇到紧急情况经常需要限流和熔断,可能你经常听到这两个词,但不是特别清楚两者的区别。

限流就是控制单位时间内的请求量,比如说早晚高峰坐地铁,很多入口都会放隔离带,降低乘客流动速度,这就是一种限流方式。

熔断就比较直接了,当判断到调用的依赖服务报错到达一定数量后,直接返回一个既定的数据,将不再访问该服务。就像家中的保险丝一样,到达一定条件后,会自行断电,以保障电路安全。所以我们也会测试触发限流和熔断所设置的阈值,并观察在触发后的系统表现是如何的。

稳定性性能测试

性能测试中的稳定性测试是通过给系统加载一定压力的情况下,运行较长一段时间,验证系统是否稳定。通常是采用典型混合场景,应用系统运行 72 小时,查看系统运行指数是否平稳。

稳定性测试的注意点

稳定性测试在性能测试中是一个相对严苛的场景,因为在 72 小时中可能发生的事情太多了,不仅仅是业务承载的问题,还包括你准备的数据、客户端稳定性,甚至硬件设备断网断电等。任何一项意外的发生,都会造成场景的失败。稳定性测试的监控级别也应当更高,一旦有问题,立即钉钉或者电话通知,所以稳定性测试之前需要有充足的预案和监控报警。

经常被问到的问题

什么情况下可以停止负载测试?

有同学问我,无论是单接口负载测试还是混合场景的负载测试都是梯度增加线程数,那线程数增加到多少程度才可以停止呢?

首先我们结合图 1 可以看到,在梯度增加线程数时,TPS 一般会随之发生变化,当你能够根据 TPS 的变化找到相应的峰值且这个值也是符合预期时,便可以停止负载测试了。

但是现实的情况并没有这么理想,很多时候当你还没有发现图 1 中的拐点时,接口就可能在报错了,那遇到这样的情况是继续测试还是停止测试呢?这其实是一个约定的问题,即测试的结束条件是什么?

  • 理想的情况下自然是达到目标就停止了。
  • 那不理想呢?根据我的经验,会在测试之前组内协商出场景异常情况下的停止条件,比如 CPU 达到 70%,响应时间超过 500 ms,接口正确率低于 99% 等,当触发这些条件时,我将不会继续加线程进行测试了。

混合场景我选取哪个线程梯度的访问量进行测试?

这个问题经常被问到,一些同学喜欢基于峰值处理能力去进行稳定性测试,这是一个很严格的要求。其实标准因公司的实际体量而异。今年的某电商双 11 实时支付峰值达到 50 w/s,有可能这个值也未必能平稳跑 72 h,但以这个访问量为执行标准已经足够用了。所以对于不同的公司而言,自行选择适当的线程梯度就可以。我经常听到一句话,今年的峰值流量就是明年的正常流量,对于这样飞速发展的公司,我想还是需要基于峰值去执行稳定性测试场景。

关于场景的命名一直有同学很困惑,感觉对于同样一个场景,怎么有的人说是混合场景,还有同学说是容量场景。关于场景名字的叫法,不仅不同的公司会不一样,就包括参考资料上也没有形成非常统一的规范,但我认为并不需要用很多精力研究场景的叫法,但你一定要能描述清楚场景的核心目的是什么,执行步骤是什么,这才是需要向你的协作伙伴传递的最准确的信息。

总结

本文系统地学习了性能测试的场景设计,关于三大基石场景的作用以及意义,混合场景的操作方法以及稳定性场景的注意事项。

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

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

相关文章

C#从网址上读取json数据

需求:从客户给的网址中读取json格式的数据。 找了好多资料,都不太好使,看到了一篇很有帮助的文章。以下大部分内容和这篇找到的文章近似。太不容易了,同时也感谢这篇文章的作者心所欲。 https://www.cnblogs.com/zoujinhua/p/10…

Webpack5 基本使用 - 3(完结)

环境区分 可以定义多个配置文件,通过 webpack-merge 合并配置文件。 安装 webpack-merge yarn add webpack-merge公共配置 // webpack.common.js const path require(path) const HtmlWebpackPlugin require(html-webpack-plugin)module.exports {entry: path…

C/C++ 跨文件共享全局变量

目录 效果 项目 代码 下载 为了实现跨文件共享全局变量,我们可以使用 extern 关键字。extern 关键字用于声明一个变量,该变量在其他地方已经定义。它告诉编译器这个变量在其他文件中已经定义了,不需要重新分配内存空间,只需要…

PyTorch深度学习实战(32)——DCGAN详解与实现

PyTorch深度学习实战(32)——DCGAN详解与实现 0. 前言1. 模型与数据集分析1.1 模型分析1.2 数据集介绍 2. 构建 DCGAN 生成人脸图像小结系列链接 0. 前言 DCGAN (Deep Convolutional Generative Adversarial Networks) 是基于生成对抗网络 (Convolution…

《向量数据库指南》——Milvus Cloud向量数据库的新认知

除了数字上的里程碑,2023 年业务模式的改变也带来了很多定性的认知。这些认知帮助我们深化了对向量这种数据类型的理解,也引导了我们思考向量数据库未来的发展方向。 大模型应用仍处于初期阶段:避免重蹈智能手机时代“手电筒应用”的覆辙 回顾移动互联网早期,许多开发者创…

黑马苍穹外卖学习Day12

文章目录 工作台需求分析 Apache POI介绍入门案例 导出运营数据Excel报表需求分析代码开发 工作台 需求分析 Apache POI 介绍 入门案例 package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.a…

ubuntu20根目录扩容

ubuntu根目录/ 或者 /home文件夹有时出现空间满了的情况,可以用gparted工具进行空间的重新分配。 首先,如果你是双系统,需要从windows系统下磁盘压缩分配一部分未使用的空间给ubuntu,注意压缩的空间要邻接ubuntu所在盘的位置。 …

【学网攻】 第(4)节 -- 交换机划分Vlan

文章目录 【学网攻】 第(1)节 -- 认识网络 【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资源得以自由流动。随着互联网的发展&am…

【pytorch】pytorch学习笔记

(实践)p5:线性回归问题中损失函数为什么要使用均方误差? 均方误差:即误差的平方和的平均数。 p8:1.pytorch不是一个完备的语言库,而是一个对于数据的gpu加速库,所以其没有对string…

【Golang入门教程】如何使用Goland创建并运行项目

自然语言处理的发展 文章目录 自然语言处理的发展**前言**创建新项目编辑运行/调试配置编写并运行代码总结强烈推荐专栏集锦写在最后 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: 人工…

新能源汽车智慧充电桩管理方案:环境监测与充电安全多维感知

随着新能源技术的不断发展,新能源充电桩作为电动汽车的重要基础设施,其管理和维护变得尤为重要。环境监测类传感器能够实时监测充电桩周围的环境参数,如温度、湿度等,为管理人员提供及时、准确的数据,以便做出相应的调…

HTML+CSS:炫酷登录切换

效果演示 实现了一个登录注册页面的切换效果,当用户点击登录或注册按钮时,会出现一个叠加层,其中包含一个表单,用户可以在表单中输入用户名和密码,然后点击提交按钮进行登录或注册。当用户点击返回按钮时,会…

第三篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:物体检测与识别

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例短博文系列 短博文目录一、项目目标二、OpenCV物体检测与识别介绍三、分别示例代码四、扩展示例代码 系列短博文目录 Python的OpenCV库技术点案例示例短博文系列 短博文目录 一、项目目标 物体检测与识别…

Pycharm终端显示PS而不显示虚拟环境venv

PS表示当前使用的是powershell.exe,如果你要显示虚拟环境名,则要改为cmd.exe 解决办法: 打开File-settings-Tools-Terminal-shell path 在文件中找到设置,在工具中找到终端 把第四个Shell路径设置为cmd.exe 3. 点击确定&#xf…

腾合力携思腾云全系列产品亮相2023算云融合产业大会

由中国信息通信研究院、中国通信标准化协会联合主办的首届算云融合产业大会于2023年3月29-30日在北京国际会议中心举办。大会围绕“云融万物 算启未来”主题,设置“主论坛六大分论坛”,覆盖产业热点领域及方向,全面推动我国算力云服务发展。集…

自定义错误页面在Spring Boot中的实现

引言 在SpringBoot中,常用的异常处理有两种:一种是 BasicErrorController,另一种是 ControllerAdvice。BasicErrorController 用于处理非Controller抛出的异常,而ControllerAdvice 用于处理Controller抛出的异常,对于…

windows vs2005编译libssh2支持sftp

windows vs2005编译libssh2支持sftp 1、编译模块 ​ 需要用到4个库:libcurl、libssh2、openssl、zlib 为啥要用libssh2 因为libcurl实现sftp功能依赖libssh2,是对libssh2的封装。 所以也可以直接用libssh2实现sftp。 为啥要用openssl 因为libssh2依…

【linux】查看进程和子进程

在Linux系统中,可以使用多个命令来查看进程及其子进程。以下是一些常用的方法: 1. ps 命令 ps 命令用于显示当前进程的状态。可以结合不同的选项来查看进程及其子进程。 查看进程树: ps -auxf - -a 显示所有进程。 - -u 显示进程的用户/所…

AI伦理边界:探索人工智能伦理计算

大家好,近年学界与工业界都已开始关注并热议 AI 伦理治理问题,也在伦理规范研究上取得了初步进展。然而,由于 AI 伦理的抽象性,如何定量化度量智能系统的伦理,还是一个未知的难题。 李学龙教授团队在《中国科学&#…

【学网攻】 第(5)节 -- Cisco VTP的使用

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资…