当前位置: 首页 > news >正文

【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~

稳定性对产品的重要性不言而喻。

而作为质量保障,在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力,7*24小时长时间运行,关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势,以及各种资源是否泄露。稳定性测试的场景设计简单,和线上实际运行有较大的出入。带来的直接结果是稳定性测试发现的问题比较有限,做完之后仍然没有特别大的信心。

那稳定性测试究竟该如何做?别人在怎么做?性能测试组今年在这方面做了一些思考和改进,虽然称不上很好的解决方案,但是通过努力比以前的做法还是有不少增强。

一、稳定性测试的三个阶段
 

第一个阶段:恒定压力阶段

目标是为了检验在恒定的大压力下,系统的服务是否稳定,比如是否存在吞吐量TPS指标的波动,响应延迟的抖动、毛刺等。波动情况必须在恒定的压力下进行验证,如果是波动的压力,出现吞吐量波动或者响应延迟的长尾现象会难以捕捉分析,难以区分是业务的问题还是服务的问题,为性能问题定位带来较大难度。

第二个阶段:基于一定的产品压力模型的,已上线产品

我们不难观察产品线上的典型业务及业务比例,那么在过去的七天或者一个月的时间内,产品每天的业务模型是什么样的?根据线上监控及统计不难得出。这个阶段就是为了模拟线上的这种业务模型下,也即是存在峰谷变化的压力、典型的一些Web产品每天的压力模型是比较固定的,比如每天早上9点,下午4点,晚上10点都会存在压力峰值。这种方式的模拟会为系统的稳定性带来一定的压力,如用户量突增等情况,会不会导致错误或宕机等。

第三个阶段:是在恒定压力下,引入异常干扰,注入异常用例

如CPU波动、网络延迟、主节点挂掉或重启等异常情况的出现,来充分拷打产品的稳定性和可靠性。在google的测试之道中也有提及这种模式,虽然没有更多细节暴漏出来,不过在这方面还是值得探索的。

二、对稳定性测试三个阶段的定义

目前稳定性测试采用的性能测试场景设计使用混合场景模式,基于产品业务模型或用户行为来定义场景,包括产品的典型业务、典型业务之间的组合关系、典型业务之间的比例等,这里不详细介绍,有兴趣欢迎联系。另外,关于稳定性测试场景的设计还有比较大的优化和提升空间,这个后面会畅谈下。

1.恒定压力阶段
 

· 定义

恒定压力阶段顾名思义保持压力大小恒定不变,在恒定不变的压力模式下,评估系统的吞吐量波动、响应延迟情况。

吞吐量TPS是指服务端每秒或每分钟正确处理的请求数,服务资源比较充足且比较稳定的情况下,通常TPS波动很小;如果TPS波动比较大,如突然下降,或剧烈抖动,则系统肯定存在性能问题,比如某个资源成为瓶颈,或某个缓冲队列堆积或爆掉等情况。

· 恒压阶段的并发选择

恒压阶段改如何选择并发?

恒压阶段并发大小的设置一般参考负载测试阶段的结果,选取性能拐点或资源临界点如CPU使用率80%左右的压力,或接近扩容指标的压力。因为一般情况下线上运行最大压力基本在扩容指标之下,选择这个压力对系统的考验会更加严格

· 恒压阶段的性能通过指标

通过指标包括两类,性能指标和资源指标。

①性能指标:TPS上下波动率不超过30%,TPS波动率是有个计算公式的;错误率肖武0.1%,且错误影响范围不大。

②资源指标:资源指标无异常,如CPU无波动,不均衡等现象;无内存泄露、连接数泄露、句柄泄露等问题。

2.压力变化阶段

定义:变压阶段的并发选择则需要根据不同场景的实际线上运行场景,或者几种典型的产品,如Web产品,或后端基础支持类的产品来进行压力定制波峰和波谷。

我们对压力变化模型的不精确定义为:

1.初始并发数需要配置,保持时间默认30min

2.上升时间T需要配置

3.最大并发数需要配置,默认为初始并发数的2倍

4.最小并发数需要配置,默认为初始并发数的1/2

5.最大最小并发数保持时间,需要配置,两段时间相等

6.周期重复数,需要配置,默认重复两次

7.下降时间不需要配置,固定为上升时间的2倍

变压阶段的并发选择

最大并发数一般选取负载测试时最大TPS对应的压力

最小并发数为最大TPS对应压力的一半,初始并发选择最大TPS对应压力的80%左右

变压阶段的性能通过指标

①性能指标:TPS波动后能够回到原来的稳定值;在波峰时,响应时间增幅不会过大;错误率小于0.1%

②资源指标:资源指标无异常,如在波峰增长阶段CPU不存在大幅度的波动情况;无内存、连接数、句柄数泄露

变压阶段的实施效果

当前我们在某些产品的实施过程中还是能发现一些问题的,如在压力上升过程中,在各项资源指标没有成为瓶颈之前,响应时间增幅很大,性能严重下降的情况

下图为在某个产品上实施的效果,可以看到响应时间是有波动,但这个波动还是可以接受的。

在某产品的稳定性测试的压力变化阶段发现在压力变化时出现少量请求错误,且响应时间增幅很大。

原因是在压力突增的时候出现数据库连接数不够用,导致请求出现失败。

3.异常干扰阶段

在进行稳定性测试时,除了压力变化手段之外,应随机增加一些异常,这样做的目的是检验系统在遇到一些异常时能否做出预期的处理和响应,而不是卡死或是不响应,异常撤消后系统能够快速恢复正常服务。

那么,增加哪些异常手段比较合适呢?

稳定性测试中选取的异常测试用例主要是一些系统层资源争用的异常,如下所示。主要包括的CPU、内存磁盘、网络异常以及服务故障及恢复等场景。稳定性中增加异常手段的主要目的是为了验证系统在受到一些异常扰动时能否快速做出响应。

·异常干扰的并发选择

同恒压阶段

· 异常干扰的异常用例设计

部分异常测试点,非完整测试用例

· 异常干扰的通过标准

①性能指标:随机异常撤销后能够回到原来的稳定值,错误类型分拣,明确错误原因,是否符合预期

②资源指标:资源指标无异常(CPU/IO/网络);无内存、连接数、句柄数泄露;程序无挂掉等情况。

异常干扰测试的实施效果

基于异常干扰的稳定性测试目前在若干个产品有实施,均能发现一些不稳定的性能问题,如高可用切换问题,异常恢复等问题

下图为在对存储盘施加一定的磁盘io压力的情况下,应用吞吐量的抖动情况,还是很坚挺的,没有出现失败或服务挂掉的情况。

(上图为TPS、下图为响应时间,TPS图的左坐标轴为TPS,右坐标轴为错误率,响应时间左坐标轴为平均响应时间,右坐标轴为最大响应时间)

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

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

相关文章:

【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~

稳定性对产品的重要性不言而喻。 而作为质量保障,在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力,7*24小时长时间运行,关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势,以及各种资源是…...

Leetcode:198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III(C++)

目录 198. 打家劫舍 问题描述: 实现代码与解析: 动态规划(版本一): 原理思路: 动态规划(版本二): 原理思路: 213. 打家劫舍 II 问题描述&#xff1a…...

【每日随笔】手指训练 ( 手指训练作用 | 哪些人需要手指训练 | 手指操 | 手指康复训练器材 )

文章目录一、手指训练作用二、哪些人需要手指训练三、手指操四、手指康复训练器材产品需求探索 , 研究下手指训练的市场 , 前景 , 是否可以开发 ; 一、手指训练作用 手指训练作用 : 改善 上肢协调性手眼 协调性训练提高 手指 抓握 能力提高 手指 灵活性提高 上肢运动 准确性 和…...

ATR指标在外汇交易中的另类运用方法

当涉及到外汇交易时,有许多不同的指标可以使用。然而,ATR指标可能是一个被低估的工具,可以帮助您发现有利可图的交易机会。本文将介绍ATR指标是什么,如何使用它来识别价格波动和制定交易策略,以及如何在外汇市场中另辟…...

SQL Server 数据批量导出处理

在实际项目环境中,有时会遇到需要将大量数据(这里所指百万级别以上的数据量)从一台服务器迁移到另外一台数据库服务器的情况。SQL Server有很多方式可以进行数据迁移:备份还原、导入/导出数据、生成脚本(包含数据&…...

虹科分享 | CANopen协议基础知识——LSS服务

CANopen是一种架构在CAN串行总线系统上的高层通讯协议,常被用于嵌入式系统与工业控制领域,包括电机控制、机器人制造、医疗、汽车等多个行业领域。本篇文章将主要介绍CANopen的LSS服务。 一. LSS概述 Layer setting service (LSS)是CANopen的设置服务与…...

JS混淆和解混淆

在今天的数字时代,知识产权和商业机密对于企业的成功非常重要。JavaScript代码可以包含许多敏感信息,例如商业逻辑、客户数据和加密密钥。为了保护这些重要信息,JavaScript混淆和解混淆已经成为一种必要的技术。 什么是JavaScript混淆&#…...

MySQL-数值函数

绝对值函数语法格式:ABS(X)例:查看三个数值的绝对值(负的绝对值为它的正整数,0的绝对值为0,正的绝对值为它本身)。mysql> select abs(2),abs(-32),abs(-0.5); ----------------------------- | abs(2) |…...

SpringMVC(1)

Web项目:基于HTTP协议,当一个用户从浏览器上面输入URL地址之后,URL能够和我们的程序映射起来,可以让用户的请求触达到后端程序里面,并且根据程序的处理,把结果返回浏览器; Spring MVC要进行学习的内容: 1)连…...

珠海先达MES系统六大功能解决电子组装行业可视化问题

电子组装行业的发展背景: 在日益激烈的市场环境中,降低成本,加快交付周期,提高产品质量已经成为了制造业发展的重要目标。企业关注的是产品的生产周期,客户关注的是产品的质量。如何在企业和消费者达成平衡&#xff0c…...

获取本机的IP地址,看似简单的获取,实则蕴含非常多的操作

这篇文章讲述了PowerJob获取本地IP离奇曲折的经过,以及开放了诸多的可配置参数,打开了我新世界的大窗户。求个关注,求个点赞,求一个评论。 获取地址的操作,本来不应该作为什么重点,但是因为一点小小的意外&…...

【SSM】篇一:初试Spring--Ioc与Bean

文章目录1、Spring2、SpringFramework系统架构3、BeanBean的配置Bean的实例化Bean的生命周期4、依赖注入DIsetter注入和构造器注入依赖自动装配5、集合注入1、Spring Spring地址:https://spring.io Spring技术的优点: Spring家族(Spring全家…...

华为OD机试真题Python实现【出租车计费】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...

Elasticsearch:如何修改 nested 字段的值

Nested 类型是 object 数据类型的特殊版本,它允许对象数组以一种可以彼此独立查询的方式进行索引。在内部,嵌套对象将数组中的每个对象索引为单独的隐藏文档,这意味着每个嵌套对象都可以使用 nested query 独立于其他对象进行查询。每个 nest…...

【JAVA】jdk8 Stream 排序精通

背景 jdk8的stream流能方便的排序,但是每次都要查资料,非常不方便,不确定,所以这次直接弄懂,不再迷茫。 转载请注明来源,创作不易,请多多支持。 基础排序 stream流 大家应该都比较熟悉了&…...

python的opencv操作记录12——Canny算子使用

文章目录Canny算子非极大值抑制非极大值抑制中的插值滞后阈值实际应用直接使用Canny算子使用膨胀先阈值分割Canny算子 上一篇说到,我在一个小项目里需要在一幅图像中提取一根试管里的两种液体的截面。为了达到这个目的使用传统图像里的区域分割技术,实际…...

Spark on hive Hive on spark

文章目录Spark on hive & Hive on sparkHive 架构与基本原理Spark on hiveHive on sparkSpark on hive & Hive on spark Hive 架构与基本原理 Hive 的核心部件主要是 User Interface(1)和 Driver(3)。而不论是元数据库&a…...

【MySQL】子查询

这里写自定义目录标题子查询1、子查询的基本使用2、 单行子查询2.1、单行比较查询2.2、HAVING 中的子查询2.3、CASE中的子查询3、多行子查询4、相关子查询5、EXISTS 与 NOT EXISTS关键字子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQ…...

Day889.MySQL高可用 -MySQL实战

MySQL高可用 Hi,我是阿昌,今天学习记录的是关于MySQL高可用的内容。 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是…...

剑指 Offer 24. 反转链表

⭐简单说两句⭐ CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 题目: 剑指 Offer 24. 反转链表 ,我们今天还是来看一道easy的题目吧&…...

“黑铁时代”,地产人如何以客户视角加速房企数字化转型

本文从行业洞察、业务设计、数据建设以及实践探索四个部分详细阐述地产行业数字化的实践、思考和理解。点击文末“阅读原文”,观看完整版直播回放并下载演讲文档。一、洞察:房企经营思路的变化企业的转型都是围绕着业务经营变化进行的,房企数…...

零入门kubernetes网络实战-14->基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章继续提供测试案例: 基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信 1、网络拓扑如下 2、网络拓扑构建…...

【pytorch框架】对模型知识的基本了解

文章目录TensorBoard的使用1、TensorBoard启动:2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使…...

SUP桨板电动气泵方案——鼎盛合方案

SUP桨板是现时最热门的水上运动之一,它的全称是Stand Up Paddle,简称SUP。这项运动近几年在我国三亚等地区风靡一时,在网上经常看到一些运动博主或者明星网红晒出冲浪视频,刺激又惊险。SUP桨板为充气式桨板,需要通过充…...

小白系列Vite-Vue3-TypeScript:011-登录界面搭建及动态路由配置

前面几篇文章我们介绍的都是ViteVue3TypeScript项目中环境相关的配置,接下来我们开始进入系统搭建部分。本篇我们来介绍登录界面搭建及动态路由配置,大家一起撸起来......搭建登录界面登陆接口api项目登陆接口是通过mockjs前端来模拟的模拟服务接口Login…...

C语言( 缓冲区和重定向)

一.缓冲输入,无缓存输入 while((chgetchar()) ! #) putchar(ch); 这里getchar(),putchar()每次只处理一个字符(这里只是知道就好了),而我们使用while循环,当读到#字符时停止 而看到输出例子,第一行我们输入…...

编程思想、方法论和架构的类型及应用

概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想编程思想为软件开发提供了思维范式和指导思路,例如面向对象思想、函数式编程思想等,它们帮助程序员更好地抽象问题、组织代码、提高代码复用性和可维护性,包括一下几…...

【OA办公】OA流程审批大揭秘,带你看遍所有基础流程

流程审批,是所有企业的OA办公系统重要组成部分,是任何OA办公系统都不可缺少的。比起传统的纸张传阅、签批的审批模式浪费了大量的时间和成本,因此越来越多的企业采用OA这种全新的、高效的、智能的审批模式。流程审批除了这些好处,…...

《零基础入门数据结构与算法》专栏介绍

目录 前言 第一部分:重点 第二部分:题库 第三部分:测试 第四部分:实验 第五部分:试卷 总结 前言 本专栏主要分为五个部分: ① 重要知识点详解 ② 近百道练习题解析 ③ 数据结构与算法章节测试 …...

测试开发之Django实战示例 第九章 扩展商店功能

第九章 扩展商店功能在上一章里,为电商站点集成了支付功能,然后可以生成PDF发票发送给用户。在本章,我们将为商店添加优惠码功能。此外,还会学习国际化和本地化的设置和建立一个推荐商品的系统。本章涵盖如下要点:建立…...