🌈 赏金任务 - 请解释一下测试金字塔是什么,它的目的是什么,以及它包含哪些层次?

赏金任务每周更新,请持续关注哦 :love_letter:

题目

  • 模拟面试场景,面试官提问以下问题,你如何回答。
  • 请解释一下测试金字塔是什么,它的目的是什么,以及它包含哪些层次?

参与方式

  • 本帖下方回复你的答案即可

赏金

  • 100元京东购物卡

活动时间

  • 2023年3月13日 - 2023年3月19日

本周赏金任务汇总:🌈 赏金任务发布 2023-03-13

本问题参与赏金活动,详情点击 :rainbow: 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍

测试金字塔是按时间成本,人力成本划分总结的测试模型,包括单元测试(类方法测试),集成测试(接口协议测试),系统测试,目的是展示测试各层次质量与成本关系,指导项目测试层次投入规划,保证测试质量,提升测试效率。

一、测试金字塔的概念:

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

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

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

二、测试金字塔的目的:

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

三、测试金字塔分层:

image

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. 加强测试对代码实现的理解;可以更好的进行测试技能拓展。

一、测试金字塔是: 测试金字塔(Testing Pyramid)是一个模型,**它将自动化测试分成三个主要类别:单元、集成和UI(或e2e测试)。这个模型允许开发更有效的测试套件,并帮助开发人员和QA实现更高质量的工作。

二、目的:提升测试覆盖率

三、包含层次:
单元测试
单元测试,有时被称为组件测试,是测试金字塔的基础,这意味着它们应该是最多的。它们通常是在开发过程中由开发人员或有时由测试人员创建。单元测试的主要目标是将代码隔离开来进行测试,以验证其是否按预期工作。

单元测试是软件开发过程中的一个关键阶段,因为它可以帮助发现早期的代码问题,这些问题在后续的测试阶段可能更难发现。尽早发现缺陷,使其在其他组件受到影响之前更容易修复。

集成测试
集成测试代表测试金字塔的第二层。与单元测试相比,它们通常需要更长的时间来执行,而且其频率应该更低。
在集成测试中,我们测试各个单元或软件组件之间的交互,或内部组件和外部组件之间的交互 - 如数据库或API。
集成测试通常比单元测试更慢、更复杂,因为它们与外部资源互动,这就需要一个与生产环境类似稳定的、预生产的环境来进行这些测试。

端到端的UI测试
端到端测试处于金字塔的顶端,目的是测试整个应用程序。这些测试使用模拟真实场景的环境和数据。
端到端测试最好从终端用户的角度来进行。
手动测试和探索性测试有时也包括在这个层次,因为它们通常侧重于UI测试,并包括测试整个系统的更复杂的场景

通常回答这几点即可:
1、什么是金字塔:测试金字塔是一种软件测试策略模型。
2、目的:旨在帮助测试团队优化测试流程,提高测试效率和质量。
3、它包含三个层次:分别是单元测试层、服务测试层和 UI 测试层,自下而上依次递增。
4、测试金字塔的优点是能够让测试团队更加关注关键的功能测试,提高测试的覆盖率和质量。
然而,在实践中,测试金字塔也可能面临一些挑战,比如:构建和维护测试用例需要大量时间和精力,同时需要保证测试用例的质量和可靠性。
image

该问题提出原因及考察点:
通常面试官可能问这个问题的原因是:
想了解你对软件测试的理解和实践经验,以及你是否熟悉常见的测试策略模型。测试金字塔是一种广泛应用的测试策略模型,对于软件测试的管理和实践有很大的参考价值,因此面试官可能会关注你对测试金字塔的理解和应用经验。

该题的考察点:
主要是你对测试金字塔的理解和运用能力,包括对测试金字塔的定义、目的、层次结构的了解,以及如何在实际测试中应用测试金字塔模型进行测试计划和测试用例设计。此外,该问题还可能考察你的沟通能力和表达能力,是否能够清晰地表达复杂的测试概念和策略,以及与面试官进行有效的交流。

测试金字塔(Test Pyramid)是一个软件测试策略,它旨在将测试分层,以最大限度地提高测试效率,减少测试成本,并确保软件的高质量。

测试金字塔的主要目的是鼓励团队根据其重要性和稳定性对测试用例进行分类和组织。它也有助于确保在更低级别的测试中发现的问题可以在更高级别的测试中解决,并且在较高级别的测试中发现的问题可以通过修复较低级别的测试来解决。这有助于减少测试成本并提高测试效率,同时确保软件的质量。

测试金字塔包含以下三个层次:

单元测试:单元测试是测试金字塔底部的层次,它是针对代码的最低级别的测试。在单元测试中,测试人员会对代码中的最小单元进行测试,例如函数或方法。单元测试可以确保代码的功能正确性,同时也可以帮助开发人员在开发过程中快速发现并修复错误。

集成测试:集成测试是测试金字塔中间层的测试,它是在单元测试之上进行的测试。在集成测试中,测试人员会测试代码模块之间的交互和集成。这可以帮助确保不同代码模块之间的集成功能正常工作。

端到端测试:端到端测试是测试金字塔的最高层级,它是针对整个系统的测试。在端到端测试中,测试人员会测试整个软件系统的功能,包括与外部系统的交互。这有助于确保整个软件系统的功能和性能都符合要求。

什么是测试金字塔?

测试金字塔是一个框架,可以促进开发人员和QA建立高质量的软件。它最大限度地减少了开发人员确定他们所做的更新是否会影响代码所需的时间。它还有助于开发一个更强大的测试套件。

目的是什么?

测试金字塔,也被称为测试自动化金字塔,本质上描述了开发和QA团队应该纳入自动化测试套件的测试类型。此外,它定义了这种评估的顺序和频率。其目的是提供快速反馈,以确保代码变化不会影响现有功能。

测试自动化金字塔在三个层次上发挥作用

  • 单元测试
  • 集成测试
  • 端对端测试

单元测试

1、单元测试是测试金字塔的基础。单元测试有一个有限的范围,并确保孤立的代码单元按预期功能运行。单元测试应该评估一个单一的变量,而不是依赖外部的依赖。
2、团队要在这个金字塔层执行提交前和提交后的测试,而测试恰好是由dev触发的。
3、强烈建议在这些测试中使用虚拟设备,如模拟器和虚拟设备的仿真器。在虚拟设备上执行这些测试是足够的,因为它提供了所需的反馈与日志/调试信息。此外,用虚拟设备进行测试,既快又有成本效益。

集成测试

1、集成测试是软件测试金字塔的第二步。单元测试检查代码库的一小部分。开发团队应该进行集成测试,以验证该代码与应用程序中其他代码的交互,这些代码通常由整个软件组成。这些测试检查代码如何与外部组件互动。这些组件可能包括外部服务(API)、数据库、网络服务和类似元素。集成测试确保软件有效地进行通信并检索准确的数据,以达到预期的效果。
2、集成测试通常比单元测试慢,因为必须与外部资源进行交互。他们还需要一个预生产环境来运行。
3、在集成测试中,正确平衡虚拟和真实设备来运行测试是至关重要的。
4、一些测试类型,如验收测试,可以在虚拟设备上进行。其他类型的测试,包括安全测试、性能测试和某些无障碍功能,不能在虚拟设备上进行;因此,在这个阶段,理想的做法是将实际设备和虚拟设备相结合。你还需要添加额外的真实操作系统/设备设置,与使用指标和市场趋势相对应。

端到端测试

1、端到端测试检查大量的代码(整个应用程序)。它使用一个测试环境和数据来模拟真实世界的功能。它的维护成本最高,运行速度最慢。由于这种测试检查组装的应用程序,它也是最难发现问题的。
2、接近端到端测试的理想方法是从终端用户的角度出发。测试人员可能会考虑一些事实,如最终用户可能参与应用程序的不同方式,他们会做什么来实现他们的应用程序的目标,以及什么可能出错。其目的是在这些行动的基础上开发一个测试。
3、端到端测试是测试自动化金字塔的顶点,因为它可能是测试过程中最耗时的阶段。端到端测试通常是脆弱的,可能有不可靠的外部依赖,如集成测试。
4、端到端测试需要真实设备更接近最终用户智能手机上的应用,因为真实用户在真实设备上而不是在虚拟设备上报告问题。
5、此外,在金字塔测试期间,模拟实际的用户行为是至关重要的。你可以通过测试你的应用程序在各种设置下的表现,包括应用程序冲突、呼叫/短信中断、网络延迟和节流,来确定你的应用程序在现实世界的表现。

测试自动化金字塔的好处是什么?

  • 节省时间和成本
  • 消除人为错误,提高准确性
  • 能够重用、重复和扩展应用测试,以满足你的软件要求

软件测试金字塔如何对敏捷团队更有利?

1、敏捷过程优先考虑速度和有效性。而敏捷测试金字塔简化了测试的过程。在金字塔的测试管道中加入逻辑性的进展和推进,有助于加速交付成果。由于测试金字塔的设计是先运行最简单的测试,测试人员可以更有效地管理他们的时间,取得更好的结果。
2、测试的金字塔为QA团队提供了必要的优先级。如果测试脚本的创建更加强调用户界面,核心业务逻辑和后端操作就不可能得到充分的测试。这影响了产品质量,增加了团队的工作量。此外,用户界面测试的高TAT(周转时间)降低了整体测试覆盖率。开发和QA团队可以通过采用金字塔式的测试策略来消除这种情况的发生。

测试金字塔的含义

测试金字塔的目的是指导测试人员进行系统化的测试规划和测试设计,以确保软件的质量。它提出了一个合理的测试策略,可以在保证测试全面性的同时,有效地控制测试成本。它是一种软件测试策略,用于指导软件测试工作的规划和执行。它被称为金字塔,是因为它将测试分层次组织,从而形成一个像金字塔一样的形状。

测试金字塔的目的

(1)提高测试效率:通过使用测试金字塔的不同层次来实现不同的测试目标,测试人员可以更加高效地进行测试。例如,在单元测试阶段,可以通过自动化测试来快速测试代码中的各个功能,减少测试人员的手动测试工作量。在集成测试和系统测试阶段,可以更加全面地测试不同的业务场景和交互功能。

(2)提高测试质量:测试金字塔通过将测试分层,可以在不同层次进行不同类型的测试,从而更好地发现和修复软件缺陷。例如,通过单元测试可以测试代码的各个功能,而通过集成测试和系统测试可以测试模块之间的协同工作和整个系统的性能和可靠性。

(3)降低测试成本:测试金字塔通过将测试分层,可以在不同层次使用不同的测试策略和工具,从而降低测试成本。例如,通过自动化单元测试可以减少测试人员的手动测试工作量,从而降低测试成本。在集成测试和系统测试阶段,可以使用一些自动化测试工具和框架来加快测试速度和提高测试效率。

测试金字塔

测试金字塔通常被分为三个层次,分别是:

单元测试(Unit Testing)

单元测试是指对软件中最小的可测试单元进行测试,如函数、方法或类等。单元测试通常由开发人员编写,目的是发现和修复代码缺陷,以及确保代码的正确性。单元测试具有以下特点:

  • 粒度小:单元测试是针对代码中最小的测试单元进行测试,通常只测试单个函数或方法。
  • 运行速度快:由于单元测试的粒度非常小,因此运行速度非常快。可以在开发周期的任何时候运行单元测试,以确保代码的正确性。
  • 可自动化:由于单元测试的运行速度非常快,因此可以使用自动化测试工具进行自动化运行。这样可以提高测试效率和准确性。
单元测试的优点包括:
  • 提高代码质量:单元测试可以帮助发现和修复代码缺陷,提高代码的质量和可靠性。
  • 提高开发效率:单元测试可以帮助开发人员更快地发现和修复代码问题,减少调试时间和测试时间,提高开发效率。
  • 改善设计:编写单元测试可以促使开发人员更加关注代码的设计和架构,从而改善代码的设计。

集成测试(Integration Testing)

集成测试是指对软件中多个模块之间的接口和交互进行测试,以确保它们能够正确地协同工作。集成测试通常由测试人员编写和执行,目的是发现模块之间的集成问题,以及确保模块之间的数据流、接口和依赖关系等都能够正确地工作。集成测试具有以下特点:

  • 测试模块之间的交互和接口:集成测试的目标是验证模块之间的协同工作,测试模块之间的交互和接口是否正确。
  • 粒度中等:集成测试的粒度介于单元测试和系统测试之间。它通常涉及多个模块,但不需要测试整个系统。

系统测试

系统测试是测试金字塔的顶层,主要关注整个系统的功能、性能和可靠性,是整个测试金字塔的最后一层。在系统测试中,测试人员通过手动和自动化测试工具来测试整个系统的业务流程、交互功能和用户界面,以确保整个系统能够正常工作并满足用户需求。系统测试通常包括以下几种测试:

  • 功能测试:测试系统是否满足用户的需求和规格说明书中的功能要求,以及系统是否能够在各种不同的操作条件下正常工作。
  • 性能测试:测试系统的性能和可伸缩性,以确定系统在负载、响应时间和吞吐量等方面的表现。
  • 安全测试:测试系统是否满足安全要求,以及是否能够保护用户数据和隐私。
  • 兼容性测试:测试系统是否能够与不同的浏览器、操作系统和硬件平台兼容。