首页 > 其他分享 >为什么自动化测试要分层

为什么自动化测试要分层

时间:2023-09-26 09:36:28浏览次数:41  
标签:软件系统 分层 测试用例 测试 自动化 软件测试

前段时间写过一篇文章:《聊聊自动化测试的分层实践》。文中介绍了分层自动化测试的出发点,每个层级开展自动化测试的前置条件以及落地的注意事项,这些内容都偏向方法和实践。

业内无论是技术大会还是各种技术课程,大多讲述的也是分层自动化测试的优势以及最佳实践,但很少看到为什么要开展分层自动化测试的文章或内容。

前几天知识星球有同学问了一个关于自动化测试的技术问题,然后沿着这个问题大家拓展性聊了很多,有技术实践也有方法论,最后聊到测试分层和自动化测试方案的抽象设计,出现了一些歧义。

鉴于一两句也无法表述清楚我个人对自动化测试的理解,索性写篇文章,聊聊我对于自动化测试的理解,以及为什么要开展分层的思考。

 

软件测试的最终目的

计算机或者软件工程专业的同学,大学里主要课程内容为编程语言、编译原理、操作系统、计算机网络、数据库原理、数据结构和算法、软件工程、系统分析和设计。其中:

  • 软件工程+系统分析和设计作为顶层方法,指导我们开展软件设计和研发,实现一个可用的软件系统;
  • 操作系统+计算机网络+数据库原理作为基础知识,让我们明白软件系统运行的基础环境和数据交互逻辑;
  • 编程语言+编译原理+数据结构与算法则是作为实践手段,帮助我们理解如何从零到一的实现一个软件系统;

从软件工程的角度来说,其作为顶层的指导方法,核心就是聚焦于软件质量不可控,利用工程化的方法去规范软件开发,让软件开发项目可以按时保质完成的同时且成本可控

由于设计(需求阶段)、编码(开发阶段)都可能存在遗漏或意料之外的影响软件质量的因素,因此才有了软件测试这一环节。

由于软件测试这一环节的出现,后面才有了软件测试的工作内容和对应的岗位,即软件测试工程师。

那么测试的最终目的是什么呢?就是通过种种方法和手段来验证编码实现的软件系统符合预期设计标准

软件产品的研发本身就是一个技术工程,从项目管理的角度出发要考虑按时交付,因此测试阶段,为了尽可能覆盖需求设计的场景,就必须考虑测试过程效率。

在规定时间内有效的完成需求范围内的测试覆盖和验证,也是软件测试的核心之一

自动化测试方法的提出和各种自动化工具的不断涌现,本身就是软件工程理念和技术实践不断完善和改进的必然结果。每一次技术改进优化,都是用更快更好的方法工具替代原有方式的过程。

 

软件测试的对象形态

从计算机诞生到软件系统开始参与到人类工作生活的各个方面,软件系统本身的架构也经过了多次的迭代。从最开始的单体架构,到垂直架构、分布式架构以及现在很成熟的微服务架构。

软件系统架构的迭代演进,背后则是需求变得越发复杂以及需求对迭代交付速度的不断提高。

为了应对不断上涨的访问流量,系统需要具备弹性水平扩容的能力;为了应对需求对交付速度的要求,系统拆分的模块越来越多以便于各自的开发进度不受影响。

因为系统的组成模块越来越多,系统的复杂度在不断提升,测试case的数量在不断增加;因为需求实现和交付速率要求的提高,因此测试验证的效率也需要不断提高,所以自动化测试在测试活动中的占比越来越高。

系统越来越复杂,意味着导致测试用例执行失败的因素越来越多,为了降低排查测试用例失败原因的耗时和难度,测试用例的设计应该变得越来越具体和细化,即一个测试用例只用来验证一个最小最具体的场景。

自动化测试目前大部分的执行场景依然是针对许多不同的最小最具体的业务场景,如果要验证复杂的业务场景(比如电商业务的下单场景,背后的业务逻辑涉及到库存扣减,三单匹配,购物车数据更新以及缓存数据的更新同步),则势必会导致失败后的排查耗时和难度增加。

有过排查问题经验的同学都知道,越是复杂的系统,排查的难度和耗时往往是指数增长的。

为了保障自动化测试的执行效率,降低失败后的排查根因耗时,才有了自动化测试的分层理念和实践,即测试同学很熟悉的三层模型。

 

自动化测试用例的设计方法

当然,单纯的测试分层并没有彻底解决问题,还需要在设计测试用例时,考虑到最小场景。

即:测试用例只需要关注自己最直接的预期结果,它的下游依赖或者调用,用对应的测试用例去覆盖即可。如果是复杂的长链路业务场景自动化测试,可以通过测试用例集合的方式来开展。

我在前面的文章《自动化测试如何区分用例集合》中对测试用例集合已做过详细介绍,即只负责执行自己所需要验证模块的case,考虑好正向逆向流程的校验点,然后调用依赖模块对应的场景和数据,双方约定好,遵循互信原则即可。

设计组合测试用例集合的注意事项,主要有如下几点:

  1. 业务团队按照一定的原则划分,而不是混乱;
  2. 每个团队之间要明确好业务边界和职责边界;
  3. 调用依赖和边界遵循统一的调用方式(如Restful);
  4. 测试数据的存储校验建议统一维护而非各自独立;
  5. 测试用例要按照不同条件做区分(类似打标签形式);
  6. 持续集成任务要按照前后依赖做好执行时序的区分;

 

标签:软件系统,分层,测试用例,测试,自动化,软件测试
From: https://www.cnblogs.com/imyalost/p/17729369.html

相关文章

  • Linux-Stream内存带宽及MLC内存延迟性能测试方法
    1、Stream内存带宽测试  Stream是业界主流的内存带宽测试程序,测试行为相对简单可控。该程序对CPU的计算能力要求很小,对CPU内存带宽压力很大。随着处理器核心数量的增大,而内存带宽并没有随之成线性增长,因此内存带宽对提升多核心的处理能力就越发重要。Stream具有良好的空间局部......
  • 接口自动化测试--Postman安装和环境部署
    Postman是一款功能强大的网页调试和模拟发送HTTP请求的谷歌插件,可以使用各种方法发送网页HTTP请求,能够运行测试用例1.先安装Postman  官网:https://www.postman.com/downloads/?utm_source=postman-home这里下载的是Windows版本的进行安装的就好环境部署需要部署node.js、cnpm、......
  • 接口自动化
    接口测试功能自动化测试:使用Selrnium、QTP等自动化工具对系统进行测试缺点:投入产出比低,发现Bug能力弱单元自动化测试缺点:难度大、找不到合适的人员、成本高接口自动化测试主要测试模块间的调用关系的正确性接口接口全称为应用编程接口,简称为API接口的本质上是程序开发的函数或者方......
  • # yyds干货盘点 # 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:withopen("./G......
  • 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:with......
  • 亚信科技AntDB数据库与优逸派科技基于人工智能的自动化运维管理平台产品完成兼容性互
    日前,亚信科技AntDB数据库与北京优逸派科技有限公司基于人工智能的自动化运维管理平台产品完成兼容互认。经过双方团队的严格测试,AntDB数据库与基于人工智能的自动化运维管理平台产品完全兼容,整体运行稳定高效。图1:亚信科技AntDB数据库与优逸派科技完成适配随着我国数字经济建设......
  • 软件工程测试--hive数据分析,步骤
    下面这里的语句在上一个博客里有需要的伙伴可以去找......
  • hive测试
    这次的hive测试的流程主要分为以下几个步骤1、数据导入到hive数据库里2、对数据清洗3、数据分析处理4、将处理后的数据导出到MySQL5、通过网页进行数据可视化   一.数据导入到hive数据库里1)建立初始表createtablesales_sample_20214044(`day_id`stringcomme......
  • 单元测试框架-pytest
    1.简介Pytest是基于python语言的单元测试框架,也是一个命令行工具,具有以下特点:入门简单,易上手支持大量的第三方插件,如:失败重试,控制用例执行顺序等基于配置文件可以简单的集成CI(持续集成)工具中 2.快速入门安装pipinstallpytest  基本格式defadd(x,y):......
  • 关于测试类注解对应的依赖
    对于测试类使用的@SpringBootTest@RunWith(SpringRunner.class)publicclassDaoTest{@AutowiredprivateUserDaouserDao;@Testpublicvoidtest1(){Useruser=newUser();user.setId(1l);user.setItemId(1L);user.setOpen......