摘要:软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,自动化测试金字塔给大家提供了一种测试策略,根据项目具体的情况,优化测试活动,最终让软件质量得到提升。
本文分享自华为云社区《测试金字塔,你在哪一层?》,作者:敏捷的小智 。
前言
软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目交付困难。软件质量可以通过规范化的研发流程、系统的软件测试等方式进行保障,本文我们就聊点测试相关的内容。
测试金字塔
软件测试是伴随着软件开发一同诞生的,随着软件规模大型化,结构复杂化,软件测试也从最初的简单“调试”,发展到当今的自动化测试。原始的“调试”,在这里就不细聊了,那自动化测试是什么呢?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,自动化测试通常会借助某些工具或者框架。虽然不能完全取代手工测试,但相比手工测试来讲,自动化测试可以减少人力成本,降低重复工作,从而更快速、高效的进行测试活动。
测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中,各层自动化测试的投入比例,其最早由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(同“$$”,“$”可以直接关联预设的局部变量)。
5.执行用例查看是否可以查询到宠物信息
通过“id”查询到的宠物信息也和之前创建的宠物信息一致,表示这两个功能是OK的。
6.创建“删除宠物信息”的接口测试用例
测试完成后,需要删除测试数据。
创建“URL请求”,将请求类型设置为“DELETE”,同样通过“$id”删除对应的宠物信息。
7.删除测试用例
以上就是一个简单的接口测试的例子,体现了接口测试既可以测试单个接口的功能,也可以测试产品多个模块联动的功能。
测试金字塔最高层——UI测试
在测试金字塔中,UI测试的覆盖范围广,接近业务侧,但是编写成本高、执行速度和稳定性都会下降,问题定位也很难。所以在测试设计中,要减少界面层的测试。如果是下层测试可以覆盖的场景和逻辑,为了提高测试的速度和节省资源,尽量放到下层去进行。
总结
软件想要有一个好的质量,严谨的测试活动必不可少,自动化测试金字塔给大家提供了一种测试策略,我们要根据项目具体的情况,优化测试活动,最终让软件质量得到提升。
最近华为云与高校联合发起的开学季活动,邀请了华为专家、斩获21offer的优秀学长,采用线上直播+赛道闯关+丰厚奖品的形式进行,旨在让同学们了解华为前沿研发理念和先进技术,体验用华为云不同产品进行场景应用的开发,加深高校学生对企业技术应用的了解,让校园学习与企业技术应用接轨,为高校学生的择业就业进行助力赋能。
奖品多多,了解一下:华为云DevCloud&AI&IoT新学期挑战赛