测试金字塔,你在哪一层?
摘要:软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,自动化测试金字塔给大家提供了一种测试策略,根据项目具体的情况,优化测试活动,最终让软件质量得到提升。
前言
软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目交付困难。软件质量可以通过规范化的研发流程、系统的软件测试等方式进行保障,本文我们就聊点测试相关的内容。
测试金字塔
软件测试是伴随着软件开发一同诞生的,随着软件规模大型化,结构复杂化,软件测试也从最初的简单“调试”,发展到当今的自动化测试。原始的“调试”,在这里就不细聊了,那自动化测试是什么呢?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,自动化测试通常会借助某些工具或者框架。虽然不能完全取代手工测试,但相比手工测试来讲,自动化测试可以减少人力成本,降低重复工作,从而更快速、高效的进行测试活动。
测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中,各层自动化测试的投入比例,其最早由Mike Cohn在2009年的著作《Scrum敏捷软件开发》中提出。Mike Cohn在书中指出:测试金字塔从上到下分为三层,分别是UI测试、服务/接口测试、单元测试,越接近金字塔底部的测试活动,投入的工作量应该越多,即单元测试投入工作量最多,接口测试次之,UI测试投入最少。
测试金字塔最底层——单元测试
单元测试属于代码级别的测试,编写成本低,执行速度快,能够快速定位问题,极限编程中的TDD测试驱动开发很多时候都是围绕单元测试开展。单元测试可以说是最低级别的测试活动,关于单元测试的内容也很多,在这不做过多介绍。
测试金字塔中间层——接口测试
随着微服务架构的广泛普及,API也成为大势所趋。因而,对API进行持续测试成为DevOps的关注点之一,如果没有API接口测试,微服务架构的实施对于企业将会成为一场灾难。
接口测试是测试系统组件间接口的一种测试,主要用于测试系统与外部其他系统之间的接口,以及系统内部各个子模块之间的接口。接口测试既可关注单个接口的参数取值和参数取值组合的合理性,也可以验证产品功能的完整性和正确性。相对比单元测试,服务/接口测试的覆盖范围要大一些。
接口测试的重点如下:
- 检查接口参数传递的正确性;
- 接口功能实现的正确性;
- 输出结果的正确性;
- 对各种异常情况的容错处理的完整性和合理性。
如何进行接口测试
Swagger是一种可生成、描述并调用RESTFUL风格API的框架。Swagger官网的样例Demo——petstore(宠物商店)对外提供一系列可以对宠物信息进行增删改查的接口,本文使用这些接口进行接口测试。
1.准备工作
首先, 通过华为云DevCloud的云测功能中的“测试用例”, 创建接口测试的测试用例。
将petstore项目的网址设为默认环境变量,这里给他命名为“pethost”,测试用例可通过“$$petstore”的形式,直接调用该变量。
环境变量也可以不设置,但每次测试都需要输入petstore的域名,很麻烦,设置成环境变量可以减少工作量,云测中输入“$$”可以直接关联预设的环境变量。
2.创建“添加宠物信息”的接口测试用例
petstore项目中,“添加宠物信息”是通过post请求完成的,该请求的请求体如下所示
创建“URL请求”,将请求类型设置为“POST”,请求地址为“$${pethost}/v2/pet”,在请求体中输入上图Json字符串,请求部分设置完成。
接下来,我们设计我们预期的检查结果,期望返回值是200,即成功,如果返回其他响应码则测试失败。
同时,还要对响应体中的某些参数做提取,便于后续业务的测试使用。在这里我们提取相应体中category.id的值,并将他赋给局部变量“id”。
3.执行用例并查看返回值
请求设置完成后,我们执行用例,可以看到响应码是200,结果是成功的。如果想看到测试不成功的场景,可以试试不按照参数列表规定,使用其他参数。
通过“近一次的结果”中“响应”,可以看到这次请求的返回值,返回值中提供的各类参数都可以通过上文提到的“响应提取”功能进行提取,供其他测试使用。
4.创建“查询宠物信息”的接口测试用例
宠物信息创建完成后,我们通过Get请求查询宠物是否真的添加完成。
创建“URL请求”,将请求类型设置为“GET”,请求地址中,通过“id”直接调用之前接口返回的id(同“”,“”可以直接关联预设的局部变量)。
响应码设置为200,预计测试通过。
5.执行用例查看是否可以查询到宠物信息
执行用例后可以看到响应码是200,和预期相符,测试成功。
通过“id”查询到的宠物信息也和之前创建的宠物信息一致,表示这两个功能是OK的。
6.创建“删除宠物信息”的接口测试用例
测试完成后,需要删除测试数据。
创建“URL请求”,将请求类型设置为“DELETE”,同样通过“$id”删除对应的宠物信息。
响应码设置为200,预计测试通过。
7.删除测试用例
执行用例后可以看到响应码是200,和预期相符,测试成功。
通过响应体也可以看出,宠物信息删除完成。
以上就是一个简单的接口测试的例子,体现了接口测试既可以测试单个接口的功能,也可以测试产品多个模块联动的功能。
测试金字塔最高层——UI测试
在测试金字塔中,UI测试的覆盖范围广,接近业务侧,但是编写成本高、执行速度和稳定性都会下降,问题定位也很难。所以在测试设计中,要减少界面层的测试。如果是下层测试可以覆盖的场景和逻辑,为了提高测试的速度和节省资源,尽量放到下层去进行。
总结
软件想要有一个好的质量,严谨的测试活动必不可少,自动化测试金字塔给大家提供了一种测试策略,我们要根据项目具体的情况,优化测试活动,最终让软件质量得到提升。
软件测试资源分享:
软件测试零基础必学
功能测试+接口测试
自动化测试+性能专项链接
安全测试+测试开发平台
有需要的小伙伴可以加群:642830685,获取资料验证码!
精彩推荐:
在职阿里6年,一个29岁女软件测试工程师的心声
公司新来的阿里p8,看了我做的APP和接口测试,甩给了我这份文档…
腾讯二面:web测试问题被虐哭了,直到学长给了我这些知识点…
测试金字塔,你在哪一层?相关推荐
- What is 测试金字塔?
[答疑解惑]| 作者 / Edison Zhou 这是恰童鞋骚年的第271篇原创内容 我的女朋友是一名测试工程师,但她之前却不知道测试金字塔的概念,为此我曾经在家里的白板上画了一个图一层一层给她讲解过 ...
- 软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?
一.测试金字塔的概念: 测试金字塔是2009年Mike Cohn在他的著作<Succeeding with Agile>一书正式提出的.他是一个类比的概念,形容每一层,或者说不同集成阶段测 ...
- 敏捷实践 | 浅谈测试金字塔
Why 为什么要学习测试金字塔 之前做测试培训的时候经常会被问到几个问题--我们项目没有自动化测试,老板想让我做,我搞了几个星期 selenium 怎么不行呢?我应该先做 API 测试还是 UI 测试 ...
- 【软件测试】移动端测试金字塔
提到测试金字塔,大家都只是单元测试是底座,上方是集成测试和端到端测试. 分层控制产品质量.移动端测试金字塔你知道吗? 无论是游戏,淘宝,还是其他网站,如果没有一流的网站,就没有数字上的成功,为世界各地 ...
- 软件测试金字塔,软件质量思考(一)测试金字塔
软件的质量该如何定义呢?衡量软件的质量可能有很多维度,我们这里不想那么学术.但你可以想象,糟糕的软件质量体现在哪里?从开发者的角度看,基本体现在两方面: 不好读懂 不好维护 当然,读懂是维护的前提,代 ...
- 用测试金字塔指导数据应用的测试
由于数据应用开发和功能性软件系统开发存在很大的不同,在我们实践过程中,在开发人员和质量保证人员间常常有大量关于测试如何实施的讨论.下文将尝试总结一下数据应用开发的特点,并讨论在这些特点之下,对应的测试 ...
- 敏捷开发中的测试金字塔(转)
最近一个爱尔兰的同事介绍了我们agile模式下的automation的工作机制,提到了测试金字塔的概念.值得推敲. 其中主要的思想就是,针对automation工作我们更多的focus点应该是Unit ...
- 软件测试模型 — 测试金字塔
测试金字塔模型: ui测试 api测试 单元测试 探索性测试 端到端测试 系统测试 集成测试 单元测试 reference: The Practical Test Pyramid
- Day918.测试金字塔 -SpringBoot与K8s云原生微服务实践
测试金字塔 Hi,我是阿昌,今天学习记录的是关于测试金字塔的内容. 软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目 ...
最新文章
- apache的prefork和workder模式
- linux下的Apache2 + mysql5 + php5 源码完整安装详解
- libev源码分析(一)libev数据结构整理
- [转载] python tuple类型如何索引_Python基础数据类型——tuple浅析
- C++设计模式(全网最通俗易懂的设计模式进阶)
- 如何在 Mac 上创建自动填充的智能文件夹?
- Linux 下mysql修改数据库存放目录方法和可能遇到的问题
- 图解形态学Morphological
- 如何让你的 x86 openwrt虚拟机上网
- frontpage 2010.2003绿色版
- 小刘的BUG(sql注入)
- 美团相关的scheme
- VLC2.2.4命令参数
- 用js做一个鼠标惯性动画
- 论文笔记(二十二):Soft Tracking Using Contacts for Cluttered Objects to Perform Blind Object Retrieval
- 如何让CFree5.0支持C++11
- ETSI开源MANO发布首个版本
- UE4 蓝图学习 FlipFlop
- 16.火星文转换 C#
- Android混淆、反编译基础教程