2023你还不会稳定性测试?这篇文章彻底讲透了

news2024/12/28 6:53:00

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

而作为质量保障,在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力,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,右坐标轴为错误率,响应时间左坐标轴为平均响应时间,右坐标轴为最大响应时间)

 今天的分享就到此结束了, 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

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

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我们的测试交流群大家一起讨论交流学习。

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

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

相关文章

浅浅谈一谈B树和B+树

目录: 🚀1.B树 🚀2.B树 索引背后的数据结构是啥呢,是B树,是为了数据库索引设计的,我们可以先了解B树,再说B树 1.什么是B树 B树也叫B-树,这里的-不读减,是一个符号 我们已经学过了二叉搜素树,B树其实就是N叉搜素树,二叉搜索树只能在每一个结点放一个…

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…

C++---最长上升子序列模型---合唱队形(每日一道算法2023.3.1)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 和 “最长上升子序列模型—登山” 的扩展题,所以dp思路这里就不再赘述。 题目: N位同学站成一排,音乐老师要请其中的 (…

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数(初始化列表)前提构造函数体赋值初始化列表explicit关键字static成员概念特性(重要)有元友元函数友元类内部类匿名对象构造函数(初始化列表) 前提 前面 六个默认成员对象中我们已经学过什么是构造…

1.4 黑群晖安装:SataPortMap和DiskIdxMap两种获取方式

tinycore及安装工具下载:工具:链接:https://pan.baidu.com/s/1CMLl6waOuW-Ys2gKZx7Jgg?pwdchct提取码:chcttinycore:链接:https://pan.baidu.com/s/19lchzLj-WDXPQu2cEcskBg?pwddcw2 提取码:d…

【博学谷学习记录】超强总结,用心分享丨人工智能 深度学习 神经网络基础知识点总结

目录神经网络激活函数引入激活函数原因:sigmoid激活函数tanh 激活函数ReLU 激活函数(最常用)SoftMax如何选择反向传播参数初始化方法优化方法正则化批量归一层网络模型调优的思路神经网络 简单的神经网络包括三层:输入层&#xf…

CentOS8基础篇10:网络环境配置

管理员为了能够更好的管理和维护网络,需要配置服务器的网络环境,再将服务器部署到网络环境中。为此他需要完成以下工作: 设置临时主机名为Server。 设置网卡信息:IP地址为192.168.137.5,子网掩码是255.255.255.0&#…

Docker 安装GitLab学习笔记

1.环境准备 1.1安装虚拟机 采用Vitualbox7.0安装ubuntu-22.04.1-live-server-amd64 虚拟机网络连接方式:桥接网卡 固定局域网ip:192.168.10.102 1.2.安装Docker 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 采用手动…

Android Button修改背景颜色及实现Button水波纹效果

Android Button修改背景颜色及实现Button水波纹效果,效果如下: 以下基于API33(Android13.0),向下兼容至API24(Android7.0)。 1.修改Button背景 我们可以发现在布局xml文件中直接修改backgroun…

(Trie Tree)字典树

(Trie Tree)字典树 场景:在n个字符串中查找某个字符串。 暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。 字典查找单词"fly",首先查找’f’,然后…

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录前言时间复杂度1.概述2.大O记法3.常见类型空间复杂度1.概述2.常见类型典型算法的复杂度分析1.递归算法2.哈希表前言 我们知道,研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求。 时间复杂度 1.概述 我们要计算算…

分享一篇由C语言实现《数据结构》无头无循环单链表

三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…

python如何快速采集美~女视频?无反爬

人生苦短 我用python~ 这次康康能给大家整点好看的不~ 环境使用: Python 3.8 Pycharm mou歌浏览器 mou歌驱动 —> 驱动版本要和浏览器版本最相近 <大版本一样, 小版本最相近> 模块使用: requests >>> pip install requests selenium >>> pip …

暑期实习准备——Verilog手撕代码(持续更新中。。。

暑期实习准备——手撕代码牛客刷题笔记Verilog快速入门VL4 移位运算与乘法VL5 位拆分与运算VL6 多功能数据处理器VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL11 4位数值比较器电路VL12 4bit超前进位加法器电路VL13 优先编码器电路①Verilog进阶挑…

Scala-模式匹配

基本语法 模式守卫 匹配类型 匹配对象 Scala 中的模式匹配类似于 Java 中的 switch 语法 基本语法 模式匹配语法中&#xff0c;采用 match 关键字声明&#xff0c;每个分支采用 case 关键字进行声明&#xff0c;当需 要匹配时&#xff0c;会从第一个 case 分支开始&#…

C++学习笔记-内存空间

考虑这样一种情况&#xff0c;当我们使用相同的名称&#xff0c;叫Zara的两个人在同一个班级。我们需要明确区分它们将不得不使用一些额外的信息&#xff0c;如他们的名字&#xff0c;如他们生活在不同的区域或母亲或父亲的名字等等。 同样的情况也出现在C应用程序中。例如&am…

Ubuntu 18.04.6 LTS 服务版安装参考

文章目录安装环境安装过程等待安装进行设置语言选择更新设置键盘样式设置IP地址配置代理配置 Ubuntu 存档镜像自定义存储配置设置账号配置 SSH安装软件包等待安装完成重启后验证安装后的基础优化重置 root 密码放开 root 远程登陆网卡信息变更修改ubuntu-18.04.6-live-server-a…

怎么用白光干涉仪的拼接测量功能

白光干涉仪的基本原理是通过不同的光学元件形成参考光路和探测光路&#xff0c;是利用干涉原理测量光程差&#xff0c;从而确定相关物理量的光学仪器。结合精密Z向扫描模块、3D 建模算法等&#xff0c;可以对器件表面进行非接触式扫描并建立表面3D图像&#xff0c;然后通过一体…

普通指针扫盲

一、什么是指针 C语言里&#xff0c;变量存放在内存中&#xff0c;而内存其实就是一组有序字节组成的数组&#xff0c;每个字节有唯一的内存地址。 CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里&#xff0c;数据对象是指存储在内存 中的一个指定数据…

【项目精选】病历管理系统设计与实现(源码+视频)

点击下载源码 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量&#xff0c;促进医学科研、教学&#xff1b;减轻各类事务性工作的劳动强度&#xff0c;使他们腾出更多的精力和时间来服务于病人。本系统结构如下&#xff1a; 电子病例系统&#xff1a; 病人登…