怎样才能设计出全面且详细的测试要点?

news2024/9/30 16:36:27

今天想跟大家分享一个案例,关于一个测试场景引发的测试要点思考。

废话不多说,上菜!

情况介绍

某天,开发同事提交了一个功能优化单,大概情况就是:为了节省内存使用,开启了一个配置,配置项有自动切换、不切换和固定切换三种模式。当达到一定阈值阀门时,会将在内存临时存储的变量写入MySQL,使用完后即删。

我们假设配置模式是auto、no、yes。

这个功能优化的原因在于:存储的变量在大数据的情况下会占用很大的临时内存,造成内存浪费。而存入mysql后,内存使用会大大下降

那么,针对这样的一个优化功能,我们可以怎么设计测试要点呢?或者说需要测试哪些呢?

一起看看

暂不说性能测试,我们单纯讨论下功能测试要点。

我想大家肯定会说:三个不同配置一定要测!这是必然的,我们得至少证明配置生效了不是。

那么我们先来看一看。

不同配置项测试

存在三个配置项auto、no、yes,那么我们依次测试。

首先测试no,不切换

该模式下,临时变量(假设为monitor)会存入内存。

因为无法检测区分monitor变量占用的内存变化(除非从代码层加入临时打印),所以对于no配置的测试我们重点在于监控日志打印(有该变量的输出),以及已有功能回归(确保不会因为新配置的引入导致故障的产生)。

总结:本次测试要点为已有功能的回归测试。

测试yes,切换

该模式下,临时变量monitor会存入mysql的某个表,且在使用完成后,该变量会清除。

对于此,我们能够很方便的从mysql观测到。因此我们的重点除了已有功能的回归测试外,还有变量存数据库,存入变量值的正确性,以及及时清除。

那么如何确定变量值的正确性?可以通过构造特定数据,产生期望的monitor值,然后观察是否存入了mysql。

那么如何确保及时清楚?这里可以分为正常情况下的清除(比如调用程序使用完成后清除)和非正常情况下的清除(比如调用程序瘫痪,无法消费该monitor变量,那么是否能在一定时间内清除)。

除此之外,我们还容易遗漏的一个测试要点:在并发的情况下,写入mysql的变量值有没有可能错乱?由此导致调用程序消费出错以及不能及时清除。

总结:本次测试要点为已有功能的回归测试,存入变量值的正确性,变量存数据库和及时清除,以及在并发情况下的测试。

测试auto,自动切换

在上两个配置项测试的基础上,我们主要需要测试阈值阀门有效性。也就是当某个变量(比如本例中的num)到达一定值时,是否能打开自动切换功能。

但在此,值得主意的一点是:我们的阈值往往会设置的比较大,而测试环境可能达不到这样的阈值,那么怎么测试?

可以采取调下阈值。比如原有配置num>1000开启自动切换,我们可以配置阈值num>100时开启自动切换,以此验证该功能正确性。

除此之外呢,我们还需要把no和yes的测试要点回归一下。

总结:本次测试要点为已有功能的回归测试,存入变量值的正确性,变量存数据库和及时清除,以及在并发情况下的测试,还有阈值上下边界测试。

除此之外呢?还有没有?

当然有!默认配置以及无配置测试呢?

默认配置测试

在本例中,默认配置是auto,那么在测auto的时候也就把默认配置测了。那对于有的配置,假如默认配置为空呢?

要知道对于空的处理很容易产生空指针之类的故障。所以,我们一定不要忘记测试默认配置。

上面所说的还都算是中规中矩比较正常的测试,那么,我们来当个“反叛者”,做做破坏性测试。

探索性破坏测试

回忆一下,这个案例中涉及了哪些程序或组件?mysql,产生monitor的程序A,以及调用写入mysql的monitor变量的程序B。

发出邪恶的笑声吧~

停止或重启mysql

在A程序正常产生monitor的过程中,使用auto或yes配置,将mysql停止或重启,试试能不能正常写入,或者看看A程序是否检测到了异常,并正确处理了异常。

停止或重启调用写入mysql的monitor变量的程序B

monitor变量写入mysql后,将B程序停止或重启,看看变量能否正常消费或及时清除。

产生monitor的程序A

有人可能会问:我听它干嘛?你不想看看要是monitor值有很多个时,写入mysql写了一半,A程序停止或重启了是个什么样的情况?就比如A的上游程序是否会有异常打印或者重试策略?

那么还有吗?别忘了我们为什么优化。

优化指标对比

因为程序运行过程中,很难区分具体变量的内存占用,但如果我们想要测试,可以试试求助开发人员,帮助我们打印或监控下内存的消耗。

因为要是有人声称:我的改动可以节省10倍内存,你会不会怀疑?

总结

我们把上面分析出的测试要点先总结下吧。

说了这些,你觉得还有什么吗?别害羞,一起过来讨论讨论。

 

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

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

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

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

相关文章

求解线性方程的方法步骤(含例题),附解线性方程计算器

大家好,这里是效率办公指南! 📐 在数学和工程问题中,线性方程是一类非常基础且常见的问题。无论是解决简单的一元一次方程,还是复杂的多元线性方程组,都有一定的方法和步骤可以遵循。今天,我们…

体育课评分系统小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,点明册管理,体育教案管理,教学评分管理,学生心率管理,身体素质测评管理,教学比赛成绩管理 微信端账号功能包括&#xf…

Autosar CP系列:设计模式之仲裁模式和信号质量模式

本文讲解关于Autosar的另外两个设计模式:仲裁模式和信号质量模式,上篇花大量篇幅讲解了《传感器执行器模式》。 1.仲裁模式 为了解决多个不同提供者或请求者之间的仲裁问题,引入一个新的组件,这个组件的作用是管理所有来自不同请…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力,能够实现对视频中的特…

Spring Cloud面试题收集

Spring Cloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。…

基于SpringBoot - Netty框架的云快充协议(充电桩协议)

云快充协议是一种标准通信协议,主要用于电动车与充电桩之间的数据交换。该协议包含了充电请求、状态查询、支付等多个功能模块。这些功能的实现不仅需要对协议进行深入理解,还需要编写相应的代码进行封装。 软件架构 1、提供云快充底层桩直连协议&#…

“DNA亲和纯化测序:汇智生物的精准分析“

🌱 汇智生物 | 专注农业&植物基因组分析 🌱 🎓 教授【优青】团队亲自指导!提供专业实验设计、数据分析、SCI论文辅助等全方位服务。精准高效,为农植物科研保驾护航! 🔬 专业实验外包服务&am…

100个超有用的Python知识点!

一、基础语法 1.变量的定义与赋值。 2.不同数据类型(整数、浮点数、字符串、布尔值、列表、元组、字典、集合)的使用。 3.运算符(算术、比较、逻辑、赋值、位运算等)。 4.控制流语句(if-else、for 循环、while 循环…

IDEA 最新版创建 Sping Boot 项目没有 JDK8 选项的解决方案

问题 今天新建一个 Java 项目写 demo 时,发现 Idea 上只能勾选 Java 17、21、23 三个版本 解决方案 IDEA 页面创建 Spring 项目,其实是访问 spring initializr 去创建项目。我们可以通过阿里云国服去间接创建 Spring 项目。服务器 URL 地址替换为 ht…

如何将list嵌套的list的[]去掉

如果list里里面的元素是数字,‘1’也是可以的,那么我们可以使用np.ravel a [[1,2,3], [5, 2, 8], [7,8,9]]list(np.ravel(a)) #[1, 2, 3, 5, 2, 8, 7, 8, 9]对于不规则List c[[‘云阳站’], [‘双江’, ‘木古’], [‘滨双线’], [‘滨双线’, ‘云田线…

【Echarts地图开发全流程加全套代码】

前言 本篇分享近期做的项目echarts相关地图开发的相关细节和避坑细节!! 一、地图Json文件 echarts地图采用官网的type类型map进行配置开发 Apache EChartsApache ECharts,一款基于JavaScript的数据可视化图表库,提供直观&…

Excel中查找某个值的位置,用位置取值

有 2022 年 1 月的日销售额统计表如下所示: 找出销售额最大的是哪一天,在 C2 单元格里输入: spl("E(?1).pmax(Sales)",A1:B32)返回结果 12 接着找出销售额最大的那天的前 5 天和后 5 天的销售额: spl("E(?1).…

RAR格式文件解压:适合各平台的RAR解压软件下载推荐

RAR格式是一种广泛使用的压缩格式,因其优秀的压缩率和多样化的功能而受到用户的喜爱。然而,尽管许多操作系统自带基本的压缩解压功能,但要处理RAR格式文件,通常需要借助专门的解压软件。本文将为用户推荐适合Windows、Mac、Linux和…

支付宝“碰一下”微信

“‘碰一下’风头正盛,他们设立了专门的项目组,特别卷,动不动搞到两点,有些受不了的,就主动活水到别的团队了。他们内部也在各种挖人,善攻(支付宝副总裁李佳佳的花名)为了这个项目拼…

RabbitMQ的高级特性-死信队列

死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信. 有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后,它能被重新被发送到另⼀个交换器 中,这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队…

9.30今日错题解析(软考)

目录 前言系统开发基础——需求分析相关概念及需求的分类面向对象技术——UML图的图示面向对象技术——面向对象的基本概念 前言 这是用来记录我备考软考设计师的错题的,今天知识点为需求分析相关概念及需求的分类、UML图的图示、面向对象的基本概念,大…

《Windows PE》3.2 PE头结构-DOS头和DOS块

正如我们在初识PE文件一节中看到的,PE文件头中包含几个重要的结构,DOS头、DOS块(DOS Stub)和NT头。NT头就是PE特征码文件头(COFF 文件标头)扩展头(可选标头),合称为NT头。…

PostgreSQL的字段存储类型了解

PostgreSQL的字段存储类型了解 在 PostgreSQL 中,每个字段(列)都有其存储类型,这些存储类型决定了数据库如何存储和处理该字段的数据。了解和适当地利用这些存储类型,可以提高数据库的性能和存储效率。 主要的存储类…

SpringBoot日志集成-LogBack

Log4J:最早的Java日志框架之一,由Apache基金会发起,提供灵活而强大的日志记录机制JDK自带的日志框架:java.util.logging.Logg,是JDK1.4之后提供的日志API,已淘汰logback: logback一个开源的日志…

【高性能内存池】thread cache内存回收 6

当线程申请的内存不用了之后就可以将不用的内存还给thread cache。 1 将内存还给thread cache 下面是thread cache的结构: thread cache中有很多的freeList,申请内存的时候也是将freeList取出给线程,因此,释放内存的时候就是将内存还原成fr…