浅谈测试分层模型及思想

2021年6月1日 0 条评论 5.09k 次阅读 0 人点赞

引子

今天跟大家聊一聊测试分层。

说到测试分层,大家映入脑海的应该是熟知的金字塔测试分层模型。

今天想和大家分享测试结构的分层(也是大家常说的自动化分层测试)、测试业务的分层以及研发测试流程的分层。

测试结构的分层

说起测试结构,为了更好地发现问题、验证需求,我们将测试按照结构分为这些层次:端到端测试(UI测试),接口测试(service/api测试),单元测试(Unittest),针对这三种常见的测试分层类型,一般有如下的三种模型:冰淇淋模型、金字塔模型、橄榄模型

冰淇淋模型

冰淇淋模型中,UI测试为主,接口和单元测试都相对较少,如下图结构所示

这种模型的特点为

  • 单元测试很少;
  • 有一定的服务级的接口测试;
  • 绝大多数测试用例使用UI进行测试,保证端到端测试的完备性

持续集成:较难。

由于单元测试和接口测试有限,自动化覆盖度较弱,稳定周期长,持续集成的实现难度较高。

测试左移:不足。

UI测试为主,意味着系统必须充分开发完成并且正确部署之后才能进行测试,测试的开始时间相对滞后,面临着测试时间不充分的风险。

代码改动的影响很难第一时间得到发现和评估,影响范围不清晰,对应的测试无法较好地保证。

自动化能力:较弱。

自动化测试率有限,测试周期相对较长,回归成本高。

测试充分程度:异常场景偏弱。

很多异常UI无法覆盖的地方测试时相对难以构造,有测试不充分的风险。

虽然缺点很多,但是很多团队可能一开始都是这么做的,希望大家能够逐渐转变。

金字塔模型

金字塔模型中,单元测试为主,UI测试相对较少,如下图结构所示

测试金字塔模型是目前业界倡导的理想模型,特点如下

  • 单元测试充分;
  • 接口级的测试较多;
  • ui级的测试少,通常只是用户验证。

对于测试金字塔,越往下靠越容易自动化,越靠下成本越低,越靠下效率越高。

该模型对开发人员的测试能力要求很高,质量控制基本成为开发的本职工作。

持续集成:容易。

由于单元测试和接口测试为主,自动化覆盖度度高,稳定周期短,利于持续集成。而且单元测试和接口测试运行速度快,回归测试很快。

测试左移:充分。

开发阶段即可暴露大部分问题,代码改动的影响第一时间就会被发现。

自动化能力:非常高。

同时,对团队的开发、测试来说能力要求也很高。

测试充分程度:中等。

虽然底层覆盖度较高,但是对于端到端测试不足,对于UI问题不容易及时发现,用户体验不能较好地保证。对于用户真实使用的场景、流程不容易完全覆盖到位。

橄榄球模型

橄榄球模型兼顾了UI和单元测试的量,接口测试为主,橄榄球模型综合了上面两种模型的优缺点,如下图结构所示

其特点如下:

  • 单元测试和UI测试适中,保持平衡;
  • 测试的重心放在接口级的测试上,提倡高度自动化;

持续集成:较为容易。

测试左移:较为充分。

自动化能力:较高。

测试充分程度:中等。

因为橄榄球模型综合了上述的优缺点,将分层做了一定程度的性价比平衡,可以作为目前的最佳实践来参考。

下面整理了这几种模型的优缺点和适应场景

模型优点缺点适应场景
冰淇淋模型端到端测试信心较为充足持续集成难,UI测试过多,质量验证偏后对端到端要求高的团队分支较少手工测试>自动化测试团队
金字塔模型测试左移充分,提前暴露发现问题利于持续集成对开发、测试人员要求高,要求开发代码级可以保证大多数场景端到端测试信心略有不足多分支,快速稳定持续集成场景团队开发、测试人员能力较高,自动化程度较高的团队端到端及用户体验要求较低,对内建质量要求较高的团队(例如业务中台,底层平台)
橄榄球模型既保证端到端信息,又保证测试左移,两者均衡测试分层和架构分析需要充足分析,才能在端到端测试和接口/单元测试之间取得平衡开发架构和测试架构成熟,产品阶段较为稳定团队开发、测试人员能力较高,自动化程度较高的团队

业务分层

下面来说说业务分层。之前给大家介绍过典型的MVC结构模型(大家可以点击这里观看->UI自动化测试架构【干货】)。

针对典型的应用,我们一般可以从如下的三个业务维度考虑测试分层:数据层面的测试、逻辑层面的测试、还有UI层面的测试。

结合上面的测试结构分层和测试业务分层,就可以做到自动化测试分层和业务测试分层相结合,在分析具体领域问题的时候,可以选择合适的测试层次和测试方法,在具体的业务领域及单功能测试中采用各种测试手段,如:分类树、决策表、正交试验、边界值、错误推断法等等。

测试流程分层

如图为一个典型的研发过程,针对这样的一个研发过程,我们将其精简为以下的几个阶段,那么针对研发的过程我们的测试策略如何制定,和我们的测试流程分层是息息相关的。

我们知道,根据bug发现阶段-成本理论,bug发现得越早,带来的成本越低,那么针对于需求、研发、发布的各个阶段,可以划分不同的测试层次。

需求阶段的测试层次(测试左移):文档静态测试、需求实例化等。这一个阶段重点需要暴露需求问题和产品不清晰的内容。

研发阶段的测试层次:code review、设计评审、代码扫描、业务测试、回归测试、上线验收测试等。这一个阶段重点暴露研发过程质量问题,并对集成后的产品进行验收测试。

发布阶段测试层次(测试右移):线上质量监控、线上数据分析、用户调研、反馈处理等。这一个阶段重点验证用户线上环境真实的质量及反馈问题,反思我们内部研发泄漏的质量问题。

今从晚向

这个人太懒什么东西都没留下

文章评论(0)

你必须 登录 才能发表评论