分层测试终究是大梦一场空?

news2024/9/20 22:49:36

分层测试分了个寂寞?

分层测试这个风吹了好多年,不分层都不好意思说自己是专业测试。各互联网公司更是对此乐此不疲,测试架构、测试平台,搞了一套又一套,然而。。。

理想总是丰满,现实总是骨干,投入了大量的人力物力在单元测试和服务端测试,还是要投入大量的集成测试,才能守住最后一道防线。怎么落地变成了困扰测试人许久的问题?分层测试真的分了个寂寞?

什么是分层测试?

分层测试就是不同的时间段,不同的团队或团队使用不同的测试用例对产品不同的关注点进行测试。一个系统/产品我们最先看到的是UI层,也就是外观或者说整体,这些是最上层,最上层依赖下面的服务层,也就是接口或者模块,最底层就是单元,这个单元是函数或者方法。按照这三层选择不同时间段,不同团队不同测试用例进行的测试就是分层测试。

单元(Unit )测试

单元测试是针对代码单元(通常是类/方法)的测试,单元测试的价值在于能提供最快的反馈,在开发过程中就可以对逻辑单元进行验证。

接口(Service/API)测试

接口测试是针对业务接口进行的测试,主要测试内部接口功能实现是否完整。如主要业务流是否能走通,异常处理是否正确,数据为空时校验等等。

接口测试的主要价值在于接口定义相对稳定,不像界面或底层代码会经常发生变化,所以接口测试比较容易编写,用例的维护成本也相对较低。在接口层面准备测试的性价比相对较高。

集成(UI)测试

集成测试从用户的角度验证产品功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个业务流。集成测试的业务价值最高,它验证的是一个完整的流程,但因为需要验证完整流程,在环境部署、准备用例及实施等方面成本较高,实施起来并不容易。

分层测试模型

测试冰淇淋模型

目前大多数的时间都在做UI方面的测试,包含UI页面元素+功能,测试的80%时间都用在UI测试上。而在单元测试和接口测试方面投入不足,也就导致测试的压力都放到UI测试阶段,一方面需要各方都提测之后才能进行,开始的时间晚,测试时间紧张;另一方面许多异常场景无法构造,测试不充分,造成漏测。但这也是我们大多数的团队采用的方式。

测试金字塔模型

Google的自动化分层投入占比是:单元测试(Unit):占比70%;接口测试(Service/API):占比20%;集成测试(UI):占比10%;这是我们理想的测试模型。这种模型的好处不言而喻,但是由于该模型对开发人员的测试能力要求很高,所以在一些测试和开发完全分离的团队以及开发能力较弱的团队,这种模式往往难以推广。

因此在基于目前中台化盛行微服务架构下,又提出了一种 测试橄榄球模型:单元测试相对较少;测试的重心放在接口级的测试上,并且提倡高度自动化;UI级的测试可以较少。

目前大多数互联网项目都是用的微服务模型,服务之间沟通交流的方式大多数是通过各种接口,接口是微服务模型项目和产品的核心。增加接口测试的比例,测试左移,让测试能提早介入,发现问题;越往上,发现问题和解决问题的成本会越高。

买家秀发生了什么?

卖家秀和买家秀总是有出入,我们的设想是能用金字塔模型来实现分层测试,然而在实际项目运转过程中,deadline一来,开发急急忙忙的提测,测试火急火燎的测试,掐着时间点上线,还谈什么单元测试、接口测试、自动化测试。

听过最多的抱怨就是:道理我都懂,可是臣妾做不到啊!

于是金字塔模型就变成了冰淇淋模型。

可是这难道是分层测试的错吗?!

难道没有deadline的压力分层测试就可以做好?就可以保证0bug上线?

买家秀卖家秀的差距,在于自身,如果自己是模特身材,才可能逆转差距,自身的修炼:理念、体系、人才、自动化成熟度

Do!How?

要摆脱冗余繁重的测试,提高测试的效率和质量,分层测试的优势还是很明显的:

  • 降低成本:测试左移,尽早发现问题解决问题,降低开发和修改成本;
  • 分层测试:在用例设计和执行测试的时候,更具有针对性,思维更加清晰,减少场景遗漏;
  • 重点测试:不同阶段关注不同,分重点测试,层层防护,减少漏侧,提高质量;
  • 业务及技能的提升:加强开发和测试对业务及代码理解,可以更好的进行技能拓展和延伸。

每个项目情况不一样,一招鲜显然是很难走到最后的,测试模型也只是模型,适用才是硬道理。单元测试、接口测试的覆盖率和门禁也要因时制宜,在实践的过程中不停地调整去适应项目的现状和发展,以更快更好地做交付。

在每个项目去实践探索的过程中,都会遇到这样那样的问题,唯有坚持与相信,才能走出一条康庄大道来!

正在做测试的朋友可以进来交流,群里给大家整理了大量学习资料和面试题项目简历等等....

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

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

相关文章

第十三章 反射操作相关函数

1. 【检测对象是否可被调用】callable()函数 语法参考 callable函数的语法格式如下: callable(object)参数说明: object:对象; 返回值:如果对象可调用返回 True,否则返回 False。 说明:对于…

Python 中print 和return 的区别,你了解吗?

1、print() print()函数的作用是输出数据到控制台,就是打印在你能看到的界面上。 2、return return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。 return作为脚本单独运行时则需要print函数才能显示,但是…

【id:17】【1分】A. DS顺序表--类实现

题目描述 用C语言和类实现顺序表 属性包括:数组、实际长度、最大长度(设定为1000) 操作包括:创建、插入、删除、查找 类定义参考 输入 第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据 第2行输…

c语言项目——三子棋小游戏(带详细讲解解析)

1.三子棋是什么? 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是…

【MySQL 索引、事务与存储引擎】

目录 一、索引的介绍2、索引的作用3、创建索引的原刚依据(面试题) 二、索引的分类和创建1、普通索引2、唯一索引3、主键索引4、组合索引5、全文索引6、查看索引7、删除索引8、分析是否使用索引 三、MySQL事务介绍1、事务的ACID特性2、隔离性 --- 不一致的…

Linux编译器gcc/g++

文章目录 Liinux编译器gcc/g1.背景知识(程序的翻译)2.动态库、静态库 Liinux编译器gcc/g 1.背景知识(程序的翻译) 以gcc编译 以g编译,但是此时会发现没有g这个指令,所有需要安装它,安装指令 yum install gcc gcc-c gcc和g都会形成可执行文…

TransFusion:利用 Transformer 进行鲁棒性融合来进行 3D 目标检测

Query 初始化 Input-dependent 以往 Query 位置是随机生成或学习作为网络参数的,而与输入数据无关,因此需要额外的阶段(解码器层)来学习模型向真实对象中心移动的过程。 论文提出了一种基于center heatmap 的 input-dependent 初…

在 Python 中使用令牌进行 API 调用

文章目录 在 Python 中进行不带令牌的 API 调用在 Python 中使用令牌调用 API总结 当我们第一次遇到如何在 Python 中调用 API 的问题时,我们的第一个想法是,“什么是 API?”。 API是应用程序编程接口的首字母缩写; 它允许您访问…

【面试】Java并发编程

ThreadLocal ThreadLocal 为什么会导致内存泄漏 hreadLocalMap使用ThreadLocal的弱引用作为key,如果一个ThreadLocal不存在外部强引用时,Key(ThreadLocal)势必会被GC回收,这样就会导致ThreadLocalMap中key为null, 而value还存在着…

15-ajax、实现过程、封装

定义 🍿🍿🍿Async Javascript and XML 异步的JavaScript 和XML,是一种创建交互式网页应用的网页开发技术,可以在不重新加载整个网页的情况下,与服务器交换数据,并且更新部分网页 离不开 XMLH…

【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 带你轻松玩转扫雷游戏 前言一. 扫雷游戏的介绍以及内部需要实现的功能解析1.什么是扫雷游戏2.扫雷游戏所需的几个步骤 二.扫雷游戏的具体实现1.打印菜单菜单上的选择功能 2.初始化以及打印棋盘初始化函数InitBoard打印棋…

如何使用测试驱动开发(TDD)来实现100%的测试覆盖率?

本文以 DDM 为例,简单地介绍一下如何用测试驱动开发(TDD, Test-Driven Development)的方法来驱动出这个函数库。 本文以DDM为例,简单地介绍一下如何用测试驱动开发(TDD, Test-Driven Development)的方法来驱动出这个函数库。 DDM简介 DDM是…

vue-cli3的安装和项目创建

一 vue-cli3的安装 (注意:vue-cli3在安装之前,需要先删除旧版本,即vue-cli2) cnpm i -g vue/cli vue-cli3的卸载:cnpm uninstall -g vue/cli 然后用命令“vue -V”查看是否删除vue,如果没有删…

kafka原理架构深入

目录 1. 下载安装2. 命令行命令3. 概述3.1 定义3.2 基本架构 4. 架构深入4.1 生产者4.1.1 分区4.1.2 数据可靠性保证4.1.3 Exactly Once语义4.1.4 发送消息流程 4.2 broker4.2.1 日志结构4.2.2 存储策略4.2.3 Controller & ZooKeeper4.2.4 高效读写数据 4.3 消费者4.3.1 消…

模型-视图-控制器模式(MVC模式,10种常见体系架构模式之一)

、简介: 架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。 模型-视图-控制器模式,也称为MVC模式。是软件工程中的一种软件架构模式&…

Word模板引擎poi-tl

文章目录 ◆ 方案对比◆ 版本◆ 特性◆ 模板◆ 数据◆ 输出◆ 数据模型◆ 标签1. 文本2. 图片3. 表格4. 列表5. 嵌套6. 区块对 ◆ SpingEL2. 单系列图标3. 多系列图标4. 组合图表 ◆ 配置1. 标签前后缀2. 标签类型3. 标签匹配值4. 标签值计算5. SpringEL6. 数据模型序列化7. 错…

设计模式之抽象工厂笔记

设计模式之抽象工厂模式笔记 说明Abstract Factory(抽象工厂)目录UML抽象工厂示例类图甜品抽象类甜品提拉米苏类甜品抹茶慕斯类 咖啡抽象类美式咖啡类拿铁咖啡类 甜品工厂接口美式风味的甜品工厂意大利风味的甜品工厂 测试类模式扩展 说明 记录下学习设计模式-抽象工厂模式的写…

吴恩达471机器学习入门课程3第1周——K-means

K-means 聚类 1 - 实现 K-means1.1 找到最近的质心练习11.2 计算质心均值练习2 2 - K-means在样本数据集上的应用3 - 随机初始化4 - K-means图像压缩4.1 数据集可视化处理数据 4.2图像像素上的 K-mean4.3 压缩图片 实现 K-means 算法,并将其用于图像压缩。 您将从一…

Autoware 跑 Demo(踩坑指南)

Autoware 跑 Demo(踩坑指南) 网上的博客和官方的教程,几乎都是一样的,但实际上跑不起来 Autoware 1.12学习整理–01–运行rosbag示例 Autoware入门学习(三)——Autoware软件功能使用介绍(1/3&a…

MySQL的IF(exp1, exp2, exp3)、IFNULL(exp1, exp2)函数的用法

本章主要是讲解一下mysql的常用方法if()和ifnull()的使用 1、if(exp1, exp2, exp3) 如果表达式exp1成立,则返回的结果是表达式exp2,否则返回的是表达式exp3 案例:现在有一个星印类型表xingyin_type 通过这个表来介绍一下这个函数的使用 sel…