热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

前言

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

测试金字塔

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

测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中,各层自动化测试的投入比例,其最早由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新学期挑战赛

 

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


推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
author-avatar
jwbnmbnm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有