【华为云敏捷扑克牌】持续测试与反馈—测试金字塔
什么是测试金字塔
通常所说的测试金字塔是自动化测试金字塔的简称,由Mike Cohn在2009年的著作《Succeeding with Agile: Software Development using Scrum 》(《Scrum敏捷软件开发》)中提出,是一个三层的金字塔,从上到下分别是UI测试、服务测试、单元测试。如下图所示。
值得注意的是, Mike Cohn测试金字塔中的各层名字大家不用纠结,随着测试技术的发展,单元测试泛指代码级别的测试,可以包含单元测试、集成测试;服务测试是组件级别的测试,接口测试也属于这一层;UI测试泛指用户级别的测试,界面测试和端到端的测试都属于这一层。 不同的软件或者服务,并不是所有层次的测试都必须具备,而是要根据软件本身的特点和团队的能力进行选择,还可以由团队自行命名。
测试金字塔的解读
随着软件开发行业的成熟,软件测试方法也日趋成熟。开发团队正在逐渐自动化大部分的测试,以此取代大量测试人员手工测试。通过自动化测试,极大地缩短了反馈周期,这与敏捷开发、持续集成、DevOps 文化是一脉相承的。自动化测试是持续集成、持续交付的基础,只有实现了自动化测试,才能实现CI/CD,走上DevOps的道路。
测试金字塔是自动化测试中的分层测试策略之一,用来指导软件开发的过程中,各层自动化测试的投入比例。
接近底层的单元测试投入最多
单元测试是基石,代码级别的测试,编写成本低,执行速度快,能够快速定位问题,可以一天多次执行。通常是放入到持续集成的流水线中去,频繁的执行以此来保证代码的质量。
服务/接口测试居中
相对比单元测试,服务/接口测试的覆盖范围要大一些,但是执行速度会慢很多。稳定性也会下降,一天内执行多次是无法实现的,每次都需要等待很久才能获得反馈结果。所以建议确保一定周期和关键时间节点上执行此类测试。还有如果不能保证单元测试,那么要保证此层级的测试做到100%的覆盖。
界面层测试投入最少
随着层级的上升,测试的覆盖范围变广,接近业务侧,但是编写成本高、执行速度和稳定性都会下降,问题定位也很难。所以在测试设计中,要减少界面层的测试。如果是下层测试可以覆盖的场景和逻辑,为了提高测试的速度和节省资源,尽量放到下层去进行。
测试金字塔是一条很好的经验法则,可以用来指导我们建立自己的测试组合。在使用时,可以参考它的两个核心要点:编写不同粒度的测试;层次越高,测试越少。切忌把它当做制定策略时的唯一参考规范。因为分层理论更多的是对自动化测试分层的指导,而测试策略需要考虑和关注的因素则比这个要多得多,比如:业务风险、质量目标、交付周期……很多很多,需要根据具体项目来确定。如果只是关注自动化测试要测哪些,没有关注业务风险,有可能把精力都放在了对错误功能的测试上,事倍功半,得不偿失。
更多的测试金字塔
戴帽子的测试金字塔
2009年9月,Lisa Crispin在她的《Agile Testing: A Practical Guide for Testers and Agile Teams》 中,给测试金字塔加了一个手工测试的帽子。在这种结构中,认为自动化测试的效果再好,也需要人工测试,如探索测试或者用户满意度测试。
蛋筒冰淇淋测试模式
2012年,Alister Scott提出的蛋筒冰激凌模式,它是测试金字塔的反模式。从图形上看,是一个倒置的测试金字塔。从结构上看,将金字塔中UI界面和单元两个结构所占比重进行了对调,并且极大增加了手工测试的比重。
许多团队,在开始引入自动化测试的时候,为了能尽快出效果,就采取了一些快速获益的措施,从最容易上手的用户界面开始,从而导致团队对于底层的自动化测试方面的关注不足。
蛋筒冰淇淋模式的出现,也说明在实际项目中,有很多不适合测试金字塔的情形存在:
- 人员能力不足的团队。大量的手工测试用例,反应了团队在自动化测试能力上的欠缺和投入不足
- 项目特点不适合更多的单元测试,而是从业务侧入手。测试策略为从用户的需求入手,回溯到单元实现上。这种项目一般是遗留系统改造,或者有大量复杂的base系统。
- 开发人员不参与自动化测试建设的团队。测试人员不熟悉底层代码和和逻辑,因此下面两层的自动化测试用例较少,从而形成头重脚轻的情况。
这种模式不利于持续集成,我们要求在代码提交的前后都要执行自动化测试用例,并且强调自动化测试要对被测软件提供快速且高质量的验证反馈。
还有其他的一些模式,如纸杯蛋糕反模式,北方天使反模式(Angel of North Anti-Pattern)等,在这里不一一赘述,感兴趣的读者可以自行查阅。
测试金字塔在DevCloud中的应用
华为云DevCloud的云测服务,应用测试金字塔测试设计方式,在接口层次进行功能自动化测试。和UI测试相比,接口测试开发成本低、运行时间短、运行稳定性高,可以实现快速准确的测试反馈。
步骤一:新建接口测试套件
- 登录DevCloud首页,搜索目标项目并单击项目名称,进入项目。
- 在顶部导航栏单击“测试 > 测试执行”。
- 进入“用例库 > 接口测试 > 测试套件”页面,单击“新建”或“创建套件”,进入“新建接口测试套件”页面。
步骤二:将接口测试添加到持续测试流水线
- 在顶部导航栏单击“构建&发布 > 流水线”。
- 选择已有流水线或者单击“新建流水线”新建一个流水线,为流水线添加如下任务。编辑任务时,选择接口测试类型,并选择对应接口测试套件,加入流水线中自动化执行,即可实现持续自动化测试。
3.执行完成后,单击接口测试套件任务名称,页面跳转到对应测试套件详情页面,可以查看详细执行结果。
华为云敏捷扑克牌
华为云敏捷扑克牌是一套敏捷和DevOps体系知识卡牌,由华为云DevCloud专家服务团队精心研发。限量兑换:https://devcloud.huaweicloud.cn/bonususer/home/costbonus
- 点赞
- 收藏
- 关注作者
评论(0)