一、测试金字塔的概念:

测试金字塔是2009年Mike Cohn在他的著作《Succeeding with Agile》一书正式提出的。他是一个类比的概念,形容每一层,或者说不同集成阶段测试覆盖率和知行效率之间的一个相对关系。

测试金字塔最初的原型分三层,底层是单元测试,中间层是 API 测试,上层 是UI 自动化测试。而且底层的单元测试需要做最多的测试工作,越往上测试工作应该越少。根据《谷歌软件测试之道》的经验,三者对于精力投入的比例是:把 70%的精力放在单元测试,20%放在 API 测试,而剩下 10%的精力放在 UI 测试。

测试金字塔的这个理念和时下流行的“测试左移”的理念是一致的。测试左移(Shift Left Testing)是指要把质量保障的活动尽量前移到更早的开发生命周期中。这个理念和测试金字塔的思想是不谋而合的,也就是我们要把测试工作往前移(对应于测试金字塔是往下沉),要把单元测试、集成测试做得更加充分和完善。而上面的 UI 测试只需要针对关键业务进行自动化回归测试即可。

二、测试金字塔的目的:

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

三、测试金字塔分层:

1.单元(Unit )测试

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

2.接口(Service/服务/API)测试

接口测试是针对业务接口进行的测试,主要测试内部接口功能实现是否完整。如主要业务流是否能走通,异常处理是否正确,数据为空时校验等等。接口测试的主要价值在于接口定义相对稳定,不像界面或底层代码会经常发生变化,所以接口测试比较容易编写,用例的维护成本也相对较低。在接口层面准备测试的性价比相对较高。

3.集成(UI)测试

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

4.覆盖率

覆盖率是金字塔的核心,底层是最宽的,象征着UT覆盖率应该是最高的,越往上越低,这一点大家都能达成共识。但是有一点需要注意的是,每网上一层应该是对下面一层覆盖率的一个补充。简单说集成测试应该聚焦于UT不好覆盖的场景或者UT采用mock方式测试的场景,而顶层的UI自动化应该聚焦于整个流程的集成测试,覆盖集成测试和UT难以覆盖到的场景。

5.执行速度

越接近代码层的测试,也就是单元测试,执行速度越快,离代码越远的测试,也就是UI测试,或者说端到端的测试,执行速度越慢。执行速度越快,意味着我们发现问题的时间越快,从而进一步减少了测试失败->定位问题->解决问题->再次触发自动化测试这个闭环的时间。

6.用例开发和维护成本

我们构建自动化测试通常是一个中间产品,是为了提高回归测试效率而产生的一个工具,并不是最终向客户交付的产品,因此我们更要考虑投入投入成本,也就是用例开发和维护的成本,成本对应图上标记的dollar。从图上可以看出,UI自动化显然是最不划算的,因为界面变化相对比较频繁,UI自动化自然很容易受影响,UI自动化用例的创建和维护也相对比较麻烦。

7.颗粒度

越往底层,颗粒度越细,问题越好隔离,发现问题越快,解决问题越快,越往上颗粒度越粗,问题越不好隔离,解决问题越慢。

四、分层测试的优势

  1. 尽量测试前移,在开发前期发现问题解决问题,开发成本会迅速下降。

  2. 不同时间段关注不同,分重点测试,层层防护。

  3. 容易定位问题,测的哪一层,出现问题,就是哪一层的问题,很明确;

  4. 分层测试在用例设计和执行测试的时候,更具有针对性,思维更加清晰,不容易遗漏;

  5. 加强测试对代码实现的理解;可以更好的进行测试技能拓展。

更多技术文章

软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?相关推荐

  1. 【软件测试】移动端测试金字塔

    提到测试金字塔,大家都只是单元测试是底座,上方是集成测试和端到端测试. 分层控制产品质量.移动端测试金字塔你知道吗? 无论是游戏,淘宝,还是其他网站,如果没有一流的网站,就没有数字上的成功,为世界各地 ...

  2. 软件测试模型 — 测试金字塔

    测试金字塔模型: ui测试 api测试 单元测试 探索性测试 端到端测试 系统测试 集成测试 单元测试 reference: The Practical Test Pyramid

  3. 软件测试面试题:请对Martin Fowler大师在测试金字塔模型的基础上提出分层自动化测试的概念,请进行描述。

    请对Martin Fowler大师在测试金字塔模型的基础上提出分层自动化测试的概念,请进行描述. 1)单元测试自动化:在面向过程编程中,单元也可以是整个模块,单常见的是单个函数或过程. 在面向对象编程 ...

  4. 软件测试金字塔,软件质量思考(一)测试金字塔

    软件的质量该如何定义呢?衡量软件的质量可能有很多维度,我们这里不想那么学术.但你可以想象,糟糕的软件质量体现在哪里?从开发者的角度看,基本体现在两方面: 不好读懂 不好维护 当然,读懂是维护的前提,代 ...

  5. Day918.测试金字塔 -SpringBoot与K8s云原生微服务实践

    测试金字塔 Hi,我是阿昌,今天学习记录的是关于测试金字塔的内容. 软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目 ...

  6. 软件测试 | 测试开发 | 做为测试,那些必须掌握的测试技术体系

    本文节选自霍格沃兹测试学院内部教材 软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程.其目的是尽快尽早地发现在软件产品中 ...

  7. 敏捷实践 | 浅谈测试金字塔

    Why 为什么要学习测试金字塔 之前做测试培训的时候经常会被问到几个问题--我们项目没有自动化测试,老板想让我做,我搞了几个星期 selenium 怎么不行呢?我应该先做 API 测试还是 UI 测试 ...

  8. 测试金字塔,你在哪一层?

    摘要:软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,自动化测试金字塔给大家提供了一种测试策略,根据项目具体的情况,优化测试活动,最终让软件质量得到提升. 前言 软件质量是衡量一个软件是 ...

  9. 用测试金字塔指导数据应用的测试

    由于数据应用开发和功能性软件系统开发存在很大的不同,在我们实践过程中,在开发人员和质量保证人员间常常有大量关于测试如何实施的讨论.下文将尝试总结一下数据应用开发的特点,并讨论在这些特点之下,对应的测试 ...

最新文章

  1. 北斗导航 | 基于卡尔曼滤波的IMU+GNSS的组合导航(附Matlab源代码)
  2. Gym - 101173H Hangar Hurdles(bfs+克鲁斯卡尔重构树)
  3. HTML转义字符大全 (换行,enter,所有特殊字符)
  4. golang 切片 接口_Golang语言常用关键字之 make 和 new
  5. 名片识别信息分类python_python文字识别
  6. 浙江省计算机二级c语言分数构成,计算机二级C语言题型和评分标准
  7. Java:接口interface
  8. 【Hadoop笔记_3】MapReduce、案例分析、实例分析代码
  9. js中的dataset的使用
  10. 香港 三星 android6.0,【极光ROM】-【三星NOTE20高通全系列(国行/港版/台版/韩版/美版) N98XX】-【V6.0 Android-R-UC1】...
  11. MIP实操指南,你真的需要配置吗?
  12. JS的unshift()和shift()
  13. 深入理解机器学习——类别不平衡学习(Imbalanced Learning):常用技术概览
  14. Generative Adversarial Registration for Improved Conditional Deformable Templates 论文
  15. 化工厂人员定位应考虑哪些因素?
  16. 字节跳动今日头条笔试题目经历2018
  17. 很黄很暴力的图片搜索引擎
  18. 【云原生】企业级容器管理平台Openshift介绍
  19. html 占据剩余空间,html – 如何使左浮动div占用剩余空间的100%?
  20. 示例:Linux设备属性节点驱动,以及cat, echo操作

热门文章

  1. 侯宁彬出席“春风拂槛”唐文化论坛并发表主题演讲
  2. 视频号引流有哪些方法?学会这几种方法快速吸粉
  3. PHP开发基于Mirai的QQ机器人(一)
  4. 步步为营---- MuleEsb学习(一) 扫盲篇
  5. Arduino与Proteus仿真实例-I2C总线多个M24C01设备数据储存仿真
  6. C语言实现可伸缩的栈结构
  7. 骁龙778G+和骁龙778G区别
  8. 求最大公因数的两种方法(高效方法)
  9. Python:PIL库中getpixel()-方法的使用
  10. 读叔本华之《人生的智慧》