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

1. 自动化测试的目标

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

3. 深入理解测试金字塔

  • 1)什么是测试金字塔?
  • 2)对测试金字塔的困惑
  • 3)正确理解金字塔模型
  • 4)金字塔模型的适用范围
  • 5)金字塔模型的实践目标
  • 6)橄榄球分层模型
  • 7)谷歌如何进行分层测试?

 

 

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% 大型测试

 

posted @ 2021-03-13 21:14  Juno3550  阅读(1919)  评论(0编辑  收藏  举报