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

性能测试场景的重要程度类似于业务测试的 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,但以这个访问量为执行标准已经足够用了。所以对于不同的公司而言,自行选择适当的线程梯度就可以。我经常听到一句话,今年的峰值流量就是明年的正常流量,对于这样飞速发展的公司,我想还是需要基于峰值去执行稳定性测试场景。

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

总结

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

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

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

相关文章

如何在转接的NVME 固态盘上安装WIN 系统并引导启动

问题: 家里的台式机一直挂着一块128G的SSD固态盘,由于家里自己建了NAS存储,所以基本数据都在NAS里,台式机就没有挂机械盘了,但是最近台式机空间被系统侵蚀,显然就不够用了,除了清理系统&#xf…

[Go]认识Beego框架

对比Gin的简洁,自己之前基于Gin撸了一个架子,确实比beego目录看着舒服多了,不过最近接触到beego的项目,beego的bee工具使用还是很方便,来简单梳理下细节; Beego是一个开源的Go语言Web应用框架,…

磺化-Cy3-IHR,Sulfo-Cyanine3-IHR,用于检测基因的表达和定位

您好,欢迎来到新研之家 文章关键词:Sulfo-Cy3-IHR,Sulfo Cyanine3 IHR,磺化-Cy3-IHR,Sulfo-Cyanine3-IHR 一、基本信息 产品简介:磺化-Cy3-IHR具有较高的荧光强度和良好的水溶性,在与生物样本…

【问题解决】java-word转pdf踩坑

问题情境: 项目中采用word转pdf,最开始使用的pdf相关的apache的pdfbox和itextpdf,后面发现对于有图片背景的word转pdf的情景,word中的背景图会直接占用位置,导致正文不会正确落在背景图上。 解决方案: 采…

水库大坝安全监测的技术手段及方法

水库大坝安全监测是指通过仪器观测和巡视检查对水利水电工程主体结构、地基基础、两岸边坡、相关设施以及周围环境所作的测量及观察。水库大坝安全监测是作为水库大坝安全管理的重要组成部分,是掌握水库大坝安全性态的重要手段,是科学调度、安全运行的前…

java数据结构与算法刷题-----LeetCode566. 重塑矩阵

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 法一,下标填充2. 法二:数学除法和取余…

gin中使用swagger生成接口文档

想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤: 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。使用swag工具扫描代码自动生成API接口文档数据使用gin-swagger渲染在线接口文档页面 第一步&…

Python filter函数

在Python编程中,filter()函数是一个有用的工具,用于筛选可迭代对象(如列表、元组等)中满足特定条件的元素,并返回一个新的可迭代对象,其中包含满足条件的元素。本文将深入探讨filter()函数的用法&#xff0…

手撕重采样,考虑C的实现方式

一、参考文章: 重采样、上采样、下采样 - 知乎 (zhihu.com) 先直接给结论,正常重采样过程如下: 1、对于原采样率fs,需要重采样到fs1,一般fs和fs1都是整数哈,则先找fs和fs1的最小公倍数,设为m…

1、【vue篇】vue框架快速上手

注意事项&#xff1a; methods必须要加s 导入vue&#xff1a;<script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>导入Axios:<script src"https://unpkg.com/axios/dist/axios.min.js"></script> 简单Vue程序…

k8s的图形化工具---rancher

声明式&#xff1a;yaml文件 陈述式&#xff1a;命令行 k8s的图形化工具---rancher racher是一个开源的企业级多集群的k8s关联平台。 rancher和k8s区别&#xff1a; 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能调度&#xff0c;还能管理k8s集群&#xff0…

(菜鸟自学)漏洞利用——MS11-080

&#xff08;菜鸟自学&#xff09;漏洞利用——MS11-080 漏洞简介利用漏洞对系统进行提权查看漏洞利用代码和工具将py脚本转换为exe程序渗透攻击验证 漏洞简介 MS11-080 是指微软于 2011 年发布的一个安全公告&#xff08;MS11-080&#xff09;&#xff0c;其中包含了关于 Win…

【DG 特长生2019】模拟赛赛后总结(2024.1.24)

打了330pt,订正后350pt T1 签到 T2 dfs剪枝&#xff08;虽然我写挂了&#xff09; T3 NOIP原题 T4 floyd 主要是想分享一下T4。 写了一种基于floyd的做法。 感觉好像和大部分人的写法不太一样。 因为看到大小关系&#xff0c;我就想到了传递性。 floyd是可以维护传递…

端口隔离技术

概念 端口隔离可实现同一VLAN内端口之间的隔离&#xff0c;为用户提供了更安全、更灵活的组网方案。 为了实现报文之间的二层隔离&#xff0c;用户可以将不同的端口加入不同的VLAN&#xff0c;但这样会浪费有限的VLAN资源。采用端口隔离功能&#xff0c;可以实现同一VLAN内端口…

探索 XMLHttpRequest:网页与服务器的异步通信之道(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

HarmonyOS鸿蒙学习基础篇 - Text文本组件

该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 Text文本组件是可以显示一段文本的组件。该组件从API Version 7开始支持&#xff0c;从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 子组件 可…

ChromeDriver谷歌驱动最新版安装120/121/122

chromeDriver最新版本下载 最新驱动 https://googlechromelabs.github.io/chrome-for-testing/参考&#xff1a; https://blog.csdn.net/m0_57382185/article/details/134007615

Transfomer相关最新研究

文章目录 iTransformerContiFormerBasisFormerMTSTMultiResFormerFPPformerDOzerfomerCSformerMASTERPCA former **PDFPathformerVQ-TR iTransformer ContiFormer BasisFormer MTST MultiResFormer FPPformer DOzerfomer CSformer MASTER PCA former ** PDF Pathformer VQ-TR…

VG-4231CE压控晶体振荡器

随着科技的飞速发展&#xff0c;各类电子设备对于稳定且精确的信号需求越来越高。VG-4231CE压控晶体振荡器&#xff08;VCXO&#xff09;&#xff0c;它能提供稳定的工作环境和高精度信号&#xff0c;助您轻松应对各种高难度信号处理任务。3MHz至50MHz的频率范围&#xff0c;输…

云卷云舒:PostgreSQL的事儿你听说了吗?

最近&#xff0c;PostgreSQL公布了全球贡献者名单。 以上是全球贡献者主要成员&#xff0c;可以看出都是外国人&#xff0c;除了一名台湾省贡献者外&#xff0c;几乎再看不到中国贡献者的身影。 那么偌大的中国&#xff0c;为什么在PostgreSQL的全球贡献者名单里面就看不到人呢…