企业级自动化测试理论(目标、框架要素、深入理解测试金字塔)

1. 自动化测试的目标

自动化测试的目标是加快研发过程,而不是试图省钱。

  • 迅速检测出新版本中不稳定的变更。

  • 迅速暴露程序回归的错误。

  • 迅速报告问题, 因为这会使程序错误修改更容易。

为了达到目标,所需要的测试能力要求

  1. 测试技术:测试的基础技术,如用例设计方法等。
  2. 业务能力:对被测对象业务的熟悉程度和理解能力。
  3. 拓展能力:如系统架构、主流技术框架、开发模式、思考方式等。

自动化测试如何做到收益最大化?

Ross Collard 在《Use Case Testing》中说到,10-15% 的测试用例可以发现 75% 到 90% 的重要缺陷。

由此,京东金融自动化测试技术高管在跟踪统计 31 个项目中发现,当测试用例的自动化覆盖率达到 15% 到 25% 时,收益达到最高。

收益最大化的自动化测试应该包含哪些内容?

  1. 核心和基础功能
  2. 行业标准高的模板或系统
  3. 公式化/程序化/运算计算/报表类
  4. 逻辑清晰,但输入组合复杂
  5. 功能专项

 

2. 理解自动化测试框架(自动化工具原理分析)

自动化测试框架的六要素

测试对象:

  • 1)被操作对象
  • 2)操作行为
  • 3)操作的值

测试管理:

  • 4)用例的组织方法
  • 5)用例的执行策略
  • 6)测试结果呈现

1)测试对象

08cee7fa2eee44b9f55caea4b16f953a.png

2)测试管理

以 JUnit 为示例,其三重唱共同产生测试结果

4b723e7be032d1f983f71fc1a63ca276.png

用例的组织方法

  • 当你需要编写更多的 TestCase 的时候,你可以创建更多的 TestCase 对象。
  • 当你需要一次执行多个 TestCase 对象的时候,您可以创建一个 TestSuite 对象或使用缺省的 TestSuite 对象进行封装。

用例的执行策略

  • 为了执行 TestSuite,需要使用 TestRunner。

测试结果呈现

  • 通过 TestRunner 的执行生成 TestResult 对象。

 

4f210e885d070c86358828e683c5d9e8.png

  

3. 深入理解测试金字塔

1)什么是测试金字塔?

Mike Cohn 在他的著作《Succeeding with Agile》一书中提出了测试金字塔这一概念。根据 Mike Cohn 的测试金字塔,测试组合应该由三层组成(自下往上分别是):单元测试、服务测试、UI 测试

  1. 单元测试:最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层。
  2. UI 测试:最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高。
  3. 服务测试:中间的服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成,服务是指实现某一具体功能的程序集合,服务通过对输入进行响应而体现。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。

Cohn 测试金字塔中提到的两件事:

  1. 编写不同粒度的测试;
  2. 层次越高,编写的测试应该越少。

即为了维持金字塔形状,一个正常、快速、可维护的测试组合应该是这样的:

  1. 写许多小而快的单元测试;
  2. 适当写一些更粗粒度的服务相关的测试,对某些业务可以理解为编写适当的接口测试;
  3. 只需写很少的高层次的端到端测试。

2)对测试金字塔的困惑

开发为什么不愿意编写单元测试?

单元测试的好处:

  1. 单元测试执行速度快。
  2. 发现 bug 时修复成本低。

但未考虑单元测试的开发成本高:

  1. 目前为止没有很好的单元测试框架来支持业务开发需求。
  2. 由于业务场景流向的串行化,测试时需要准备大量的数据,因此单元测试时需要 mock 数据,而 mock 数据本身也是较为复杂的。
  3. 由于业务复杂,因此写单元测试(如异常场景用例)时更复杂。

为什么大部分公司还在做 UI 测试?

单元测试、接口自动化测试覆盖足够高,是不是就不需要 UI 测试了呢?—— 并不是。

因为质量有两层含义:

  1. 基于用户体验 —— UI 测试
  2. 基于产品品质(内建质量) —— 单元、接口测试

质量的两层含义,也对应着测试人员发展的两个方向:

  1. 测试技术
  2. 测试开发能力

3)正确理解金字塔模型

按照 Cohn 在测试金字塔模型中提到的观点,在开发过程中,应该编写和开发更多小而快的单元测试,以更快更高效完成质量反馈,而应该写很少的端到端 UI 测试。

但实际上在大部分的公司里,开发同学还是不太愿意写更多的单元测试,而是更多的进行 UI 层的测试呢?难道说测试金字塔模型有问题?要搞明白这个问题,我们先要思考一下,在软件测试的过程中测试是希望达成什么样的目标?在保障过程中是在保障哪一部分内容?

在 ISO25000 标准中,测试质量被分为内部质量和外部质量

  • 外部质量:就是我们常说的用户体验,是用户使用过程中的用户体验,是否好用,是否易用,是否可靠等等。
  • 内部质量:更多的是内建质量,关注的是产品安全性、可测性、可重用性、可维护性以及可移植性等等。

03179cbaa37446e98e4c619b5db9e827.png

用户量较小的 C 端产品或者业务复杂的产品中,测试的过程更多的关注于用户体验属性;而用户量大的产品更多关注于产品的内建质量

  • 比如在创业团队中,一般更多的关注于用户体验,在保障产品质量的过程中一般会有更多的资源投入到 UI 层面的测试和质量保障。测试的模型大概率是冰淇淋(倒三角)模型。
  • 而在云和大数据、人工智能的团队中,因为对安全性、可测性、可重用性、可维护性以及可移植性等方面的要求很高,测试资源会更多的向单元测试和接口测试层面倾斜。

4)金字塔模型的适用范围

按照以上分析,测试金字塔模型的也是有一定适用范围的:

  • 对于用户体验要求更高的产品或者业务更复杂产品,测试金字塔模型匹配度较低;
  • 而对于内建质量要求更高的产品,比如云、大数据、人工智能等产品,更适合使用金字塔模型构建我们的测试策略或者测试组合。

ccffecbeb161939f82b17bd9ade905f3.png

这也很好地解释了,金字塔模型既然得到了那么多人的认可,为什么在真正落地的时候,大部分团队还是按照冰激凌(倒三角)模式执行。不管是金字塔模型还是冰激凌模型,其实都是都是一种测试组合或者策略。

5)金字塔模型的实践目标

08411cf223e314cbe02c24d3b8b9842f.png

如上图所示净化水的装置,也是通过不同的组合得到干净的水质,纱布过滤较大的浮尘和杂物,小卵石和石英砂净化泥沙,活性炭进行杀菌消毒,蓬松棉在此过滤细粒度的杂物,确保得到更干净的水(分层测试的每个层次都只有一个重点,解决一种问题)。

其实测试金字塔模型是分层测试策略,是通过按照单元测试、接口测试、UI 测试按照不同的目标要求,总结出来的一套最佳分层测试实践。

对于每一个层次所达成的目标也是在一定范围之内的,比如:

  1. 单元测试主要解决单功能或者函数的正确性;
  2. 接口测试确保各种异常输入输出的正确性;
  3. UI 测试主要保障产品符合用户需求,满足用户心理预期,可以给用户提供良好的使用体验。

通过金字塔模型进行组合测试,最大程度保障测试能够被快速执行,快速反馈,进而降低质量保障的总成本。 

6)橄榄球分层模型

既然单元测试实现难度较高,而在微服务架构下,还有一种新兴的备受推崇的橄榄球分层模型,即尽可能接口测试先行

7)谷歌如何进行分层测试?

谷歌采用 70/20/10 原则:70% 小型测试,20% 中型测试,10% 大型测试

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

 

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

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

相关文章

YITH WooCommerce Questions and Answers电商网站问答功能高级版

点击阅读YITH WooCommerce Questions and Answers电商网站问答功能高级版原文 YITH WooCommerce Questions and Answers电商网站问答高级版的作用在您的产品页面中构建强大的问答部分,以便您的客户可以找到问题的答案并毫无疑问地购买。 您如何从中受益&#xff1…

LabVIEW远程监控

LabVIEW远程监控 远程监控的应用场景 从办公室远程监控工厂车间的测试设备。 在世界另一端的偏远地区监控客户现场的发电设备。 从公司远程监控外场的产品。 技术更新与方法 自2018年以来,NI对基于Web的应用程序支持大幅增长。一些最初的方法(如Lab…

3.镜像加速器

目录 1 阿里云 2 网易云 从网络上拉取镜像的时候使用默认的源可能会慢,用国内的源会快一些 1 阿里云 访问 阿里云-计算,为了无法计算的价值 然后登录,登录后搜索 容器镜像服务 点击容器镜像服务 点击管理控制台 点击 镜像工具->镜像…

【web安全】文件包含漏洞详细整理

前言 菜某的笔记总结,如有错误请指正。 本文用的是PHP语言作为案例 文件包含漏洞的概念 开发者使用include()等函数,可以把别的文件中的代码引入当前文件中执行,而又没有对用户输入的内容进行充分的过滤&#xff0…

5G入门到精通 - 5G的十大关键技术

文章目录 一、网络切片二、自组织网络三、D2D技术四、低时延技术五、MIMO技术六、毫米波七、内容分发网络八、M2M技术九、频谱共享十、信息中心网络 一、网络切片 5G中的网络切片是一项关键技术,它允许将整个5G网络分割成多个独立的虚拟网络,每个虚拟网络…

CodeBlocks添加头文件,解决fatal error: ui.h No such file or directory

问题描述 在使用codeblocks工具进行LVGL仿真过程中报错,找不到头文件 原因分析: 没有将头文件加入编辑器搜索的目录中,编译时找不到头文件。 解决方案: 将要包含的头文件的目录加进去就可以了

BCI-Two-streams hypothesis(双流假说)

双流假说 双流假设(Two-stream hypothesis)是关于视觉和听觉神经处理的模型。该假设最初由大卫米尔纳(David Milner)和梅尔文古德尔(Melvyn A. Goodale)于1992年的一篇论文中进行了初步描述,认为人类拥有两个独立的视觉…

【爬取音乐,并将音乐信息储存到数据库中】

爬取音乐,并将音乐信息储存到数据库中 确定音乐网站的url并分析网站分析二级页面创建数据库使用Xpath解析,进行多层爬取保存信息完整代码结果 确定音乐网站的url并分析网站 分析二级页面 创建数据库 # 创建一个链接对象 conn pymysql.connect(hostmaster, userroo…

虚拟网络技术:bond技术

网卡bond也称为网卡捆绑,就是将两个或者更多的物理网卡绑定成一个虚拟网卡。 bond的作用: 1.提高网卡的吞吐量 2.增加网络的高可用,实现负载均衡。 一、bond简介 bond技术即bonding,能将多块物理网卡绑定到一块虚拟网卡上&…

六、C语言数组

1. 数组的概念 数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息: 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组&#xf…

Prometheus 发现机制和告警

1.服务发现 Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据。在不同的场景下,需要结合不同的机制来实现对应的数据抓取目的。 对于小型的…

企业级 接口自动化测试框架:Pytest+Allure+Excel

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具,它不仅以 Web 的方式展示了简介的测试结果,而且允许参与开发过程的每个人可以从日常执行的测试中,最大限度地提取有用信息。 Allure 是由 Java 语言开发…

【学习记录】从0开始的Linux学习之旅——字符型设备驱动及应用

一、概述 Linux操作系统通常是基于Linux内核,并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程,具有强大的网络功能和良好的兼容性。基于前面应用与驱动的开发学习,本文主要讲述如何在linux系统上把应用与驱动…

参考信号速度变化存在跳跃时容易发生不稳定的阻抗调节

问题描述 当参考信号速度存在跳跃变化时,阻抗调节系统容易发生不稳定。这是因为阻抗调节系统需要根据参考信号的速度来调整其输出阻抗,以匹配负载阻抗,从而保持系统的稳定性。 当参考信号速度突然变化时,阻抗调节系统可能无法及…

『TypeScript』深入理解变量声明、函数定义、类与接口及泛型

📣读完这篇文章里你能收获到 了解TypeScript变量声明与类型注解掌握TypeScript函数与方法的使用掌握TypeScript类与接口的使用掌握TypeScript泛型的应用 文章目录 一、变量声明与类型注解1. 变量声明2. 类型注解3. 类型推断 二、函数与方法定义1. 函数定义2. 方法定…

Jmeter 性能测试基础!

压力测试   压力测试分两种场景:一种是单场景,压一个接口的;第二种是混合场景,多个有关联的接口。压测时间,一般场景都运行10-15分钟。如果是疲劳测试,可以压一天或一周,根据实际情况来定。 压…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题: 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库,或者某些自动注入bean失效的情况 解决方法: 1.在构造方法中通过工具类获取需要的bean 工具类代码: import org.springframework.beans…

Spring到底是如何解决循环依赖问题的?

Spring作为当前使用最广泛的框架之一,其重要性不言而喻。所以充分理解Spring的底层实现原理对于咱们Java程序员来说至关重要,那么今天笔者就详细说说Spring框架中一个核心技术点:如何解决循环依赖问题? 什么是循环依赖问题&#x…

JVM理解

1、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。 他是帮助我们将java代码 生成编译后 的 class 文件。 2、JRE、JDK和JVM 的关系 …

用AI批量生成文章的工具有哪些?免费AI生成工具

人工智能(AI)技术不断演进,为许多领域带来了前所未有的便利。其中,AI生成文章技术作为一个备受关注的领域,为大家提供了独特的解决方案,特别是在批量文章生成的需求上。 1. AI生成文章的方法 开放式AI模型…