自动化测试理论(目标、框架要素、深入理解测试金字塔)
1. 自动化测试的目标
2. 理解自动化测试框架(自动化工具原理分析)
3. 深入理解测试金字塔
- 1)什么是测试金字塔?
- 2)对测试金字塔的困惑
- 3)正确理解金字塔模型
- 4)金字塔模型的适用范围
- 5)金字塔模型的实践目标
- 6)橄榄球分层模型
- 7)谷歌如何进行分层测试?
1. 自动化测试的目标
自动化测试的目标是加快研发过程,而不是试图省钱。
-
迅速检测出新版本中不稳定的变更。
-
迅速暴露程序回归的错误。
-
迅速报告问题, 因为这会使程序错误修改更容易。
为了达到目标,所需要的测试能力要求
- 测试技术:测试的基础技术,如用例设计方法等。
- 业务能力:对被测对象业务的熟悉程度和理解能力。
- 拓展能力:如系统架构、主流技术框架、开发模式、思考方式等。
自动化测试如何做到收益最大化?
Ross Collard 在《Use Case Testing》中说到,10-15% 的测试用例可以发现 75% 到 90% 的重要缺陷。
由此,京东金融自动化测试技术高管在跟踪统计 31 个项目中发现,当测试用例的自动化覆盖率达到 15% 到 25% 时,收益达到最高。
收益最大化的自动化测试应该包含哪些内容?
- 核心和基础功能
- 行业标准高的模板或系统
- 公式化/程序化/运算计算/报表类
- 逻辑清晰,但输入组合复杂
- 功能专项
2. 理解自动化测试框架(自动化工具原理分析)
自动化测试框架的六要素
测试对象:
- 1)被操作对象
- 2)操作行为
- 3)操作的值
测试管理:
- 4)用例的组织方法
- 5)用例的执行策略
- 6)测试结果呈现
1)测试对象
2)测试管理
以 JUnit 为示例,其三重唱共同产生测试结果
用例的组织方法
- 当你需要编写更多的 TestCase 的时候,你可以创建更多的 TestCase 对象。
- 当你需要一次执行多个 TestCase 对象的时候,您可以创建一个 TestSuite 对象或使用缺省的 TestSuite 对象进行封装。
用例的执行策略
- 为了执行 TestSuite,需要使用 TestRunner。
测试结果呈现
- 通过 TestRunner 的执行生成 TestResult 对象。
3. 深入理解测试金字塔
1)什么是测试金字塔?
Mike Cohn 在他的著作《Succeeding with Agile》一书中提出了测试金字塔这一概念。根据 Mike Cohn 的测试金字塔,测试组合应该由三层组成(自下往上分别是):单元测试、服务测试、UI 测试。
- 单元测试:最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层。
- UI 测试:最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高。
- 服务测试:中间的服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成,服务是指实现某一具体功能的程序集合,服务通过对输入进行响应而体现。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。
Cohn 测试金字塔中提到的两件事:
- 编写不同粒度的测试;
- 层次越高,编写的测试应该越少。
即为了维持金字塔形状,一个正常、快速、可维护的测试组合应该是这样的:
- 写许多小而快的单元测试;
- 适当写一些更粗粒度的服务相关的测试,对某些业务可以理解为编写适当的接口测试;
- 只需写很少的高层次的端到端测试。
2)对测试金字塔的困惑
开发为什么不愿意编写单元测试?
单元测试的好处:
- 单元测试执行速度快。
- 发现 bug 时修复成本低。
但未考虑单元测试的开发成本高:
- 目前为止没有很好的单元测试框架来支持业务开发需求。
- 由于业务场景流向的串行化,测试时需要准备大量的数据,因此单元测试时需要 mock 数据,而 mock 数据本身也是较为复杂的。
- 由于业务复杂,因此写单元测试(如异常场景用例)时更复杂。
为什么大部分公司还在做 UI 测试?
单元测试、接口自动化测试覆盖足够高,是不是就不需要 UI 测试了呢?—— 并不是。
因为质量有两层含义:
- 基于用户体验 —— UI 测试
- 基于产品品质(内建质量) —— 单元、接口测试
质量的两层含义,也对应着测试人员发展的两个方向:
- 测试技术
- 测试开发能力
3)正确理解金字塔模型
按照 Cohn 在测试金字塔模型中提到的观点,在开发过程中,应该编写和开发更多小而快的单元测试,以更快更高效完成质量反馈,而应该写很少的端到端 UI 测试。
但实际上在大部分的公司里,开发同学还是不太愿意写更多的单元测试,而是更多的进行 UI 层的测试呢?难道说测试金字塔模型有问题?要搞明白这个问题,我们先要思考一下,在软件测试的过程中测试是希望达成什么样的目标?在保障过程中是在保障哪一部分内容?
在 ISO25000 标准中,测试质量被分为内部质量和外部质量:
- 外部质量:就是我们常说的用户体验,是用户使用过程中的用户体验,是否好用,是否易用,是否可靠等等。
- 内部质量:更多的是内建质量,关注的是产品安全性、可测性、可重用性、可维护性以及可移植性等等。
在用户量较小的 C 端产品或者业务复杂的产品中,测试的过程更多的关注于用户体验属性;而用户量大的产品更多关注于产品的内建质量。
- 比如在创业团队中,一般更多的关注于用户体验,在保障产品质量的过程中一般会有更多的资源投入到 UI 层面的测试和质量保障。测试的模型大概率是冰淇淋(倒三角)模型。
- 而在云和大数据、人工智能的团队中,因为对安全性、可测性、可重用性、可维护性以及可移植性等方面的要求很高,测试资源会更多的向单元测试和接口测试层面倾斜。
4)金字塔模型的适用范围
按照以上分析,测试金字塔模型的也是有一定适用范围的:
- 对于用户体验要求更高的产品或者业务更复杂产品,测试金字塔模型匹配度较低;
- 而对于内建质量要求更高的产品,比如云、大数据、人工智能等产品,更适合使用金字塔模型构建我们的测试策略或者测试组合。
这也很好地解释了,金字塔模型既然得到了那么多人的认可,为什么在真正落地的时候,大部分团队还是按照冰激凌(倒三角)模式执行。不管是金字塔模型还是冰激凌模型,其实都是都是一种测试组合或者策略。
5)金字塔模型的实践目标
如上图所示净化水的装置,也是通过不同的组合得到干净的水质,纱布过滤较大的浮尘和杂物,小卵石和石英砂净化泥沙,活性炭进行杀菌消毒,蓬松棉在此过滤细粒度的杂物,确保得到更干净的水(分层测试的每个层次都只有一个重点,解决一种问题)。
其实测试金字塔模型是分层测试策略,是通过按照单元测试、接口测试、UI 测试按照不同的目标要求,总结出来的一套最佳分层测试实践。
对于每一个层次所达成的目标也是在一定范围之内的,比如:
- 单元测试主要解决单功能或者函数的正确性;
- 接口测试确保各种异常输入输出的正确性;
- UI 测试主要保障产品符合用户需求,满足用户心理预期,可以给用户提供良好的使用体验。
通过金字塔模型进行组合测试,最大程度保障测试能够被快速执行,快速反馈,进而降低质量保障的总成本。
6)橄榄球分层模型
既然单元测试实现难度较高,而在微服务架构下,还有一种新兴的备受推崇的橄榄球分层模型,即尽可能接口测试先行。
7)谷歌如何进行分层测试?
谷歌采用 70/20/10 原则:70% 小型测试,20% 中型测试,10% 大型测试