写点什么

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

发布于: 3 小时前

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


本文分享自华为云社区《测试金字塔,你在哪一层?》,作者:敏捷的小智 。

前言


软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目交付困难。软件质量可以通过规范化的研发流程、系统的软件测试等方式进行保障,本文我们就聊点测试相关的内容。

测试金字塔


软件测试是伴随着软件开发一同诞生的,随着软件规模大型化,结构复杂化,软件测试也从最初的简单“调试”,发展到当今的自动化测试。原始的“调试”,在这里就不细聊了,那自动化测试是什么呢?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,自动化测试通常会借助某些工具或者框架。虽然不能完全取代手工测试,但相比手工测试来讲,自动化测试可以减少人力成本,降低重复工作,从而更快速、高效的进行测试活动。



测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中,各层自动化测试的投入比例,其最早由 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 测试的覆盖范围广,接近业务侧,但是编写成本高、执行速度和稳定性都会下降,问题定位也很难。所以在测试设计中,要减少界面层的测试。如果是下层测试可以覆盖的场景和逻辑,为了提高测试的速度和节省资源,尽量放到下层去进行。

总结


软件想要有一个好的质量,严谨的测试活动必不可少,自动化测试金字塔给大家提供了一种测试策略,我们要根据项目具体的情况,优化测试活动,最终让软件质量得到提升。


最近华为云与高校联合发起的开学季活动,邀请了华为专家、斩获 21offer 的优秀学长,采用线上直播+赛道闯关+丰厚奖品的形式进行,旨在让同学们了解华为前沿研发理念和先进技术,体验用华为云不同产品进行场景应用的开发,加深高校学生对企业技术应用的了解,让校园学习与企业技术应用接轨,为高校学生的择业就业进行助力赋能。奖品多多,了解一下:华为云DevCloud&AI&IoT新学期挑战赛



点击关注,第一时间了解华为云新鲜技术~

发布于: 3 小时前阅读数: 5
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
测试金字塔,你在哪一层?