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

前言

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

测试金字塔

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


测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中,各层自动化测试的投入比例,其最早由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测试问题被虐哭了,直到学长给了我这些知识点…

测试金字塔,你在哪一层?相关推荐

  1. What is 测试金字塔?

    [答疑解惑]| 作者 / Edison Zhou 这是恰童鞋骚年的第271篇原创内容 我的女朋友是一名测试工程师,但她之前却不知道测试金字塔的概念,为此我曾经在家里的白板上画了一个图一层一层给她讲解过 ...

  2. 软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?

    一.测试金字塔的概念: 测试金字塔是2009年Mike Cohn在他的著作<Succeeding with Agile>一书正式提出的.他是一个类比的概念,形容每一层,或者说不同集成阶段测 ...

  3. 敏捷实践 | 浅谈测试金字塔

    Why 为什么要学习测试金字塔 之前做测试培训的时候经常会被问到几个问题--我们项目没有自动化测试,老板想让我做,我搞了几个星期 selenium 怎么不行呢?我应该先做 API 测试还是 UI 测试 ...

  4. 【软件测试】移动端测试金字塔

    提到测试金字塔,大家都只是单元测试是底座,上方是集成测试和端到端测试. 分层控制产品质量.移动端测试金字塔你知道吗? 无论是游戏,淘宝,还是其他网站,如果没有一流的网站,就没有数字上的成功,为世界各地 ...

  5. 软件测试金字塔,软件质量思考(一)测试金字塔

    软件的质量该如何定义呢?衡量软件的质量可能有很多维度,我们这里不想那么学术.但你可以想象,糟糕的软件质量体现在哪里?从开发者的角度看,基本体现在两方面: 不好读懂 不好维护 当然,读懂是维护的前提,代 ...

  6. 用测试金字塔指导数据应用的测试

    由于数据应用开发和功能性软件系统开发存在很大的不同,在我们实践过程中,在开发人员和质量保证人员间常常有大量关于测试如何实施的讨论.下文将尝试总结一下数据应用开发的特点,并讨论在这些特点之下,对应的测试 ...

  7. 敏捷开发中的测试金字塔(转)

    最近一个爱尔兰的同事介绍了我们agile模式下的automation的工作机制,提到了测试金字塔的概念.值得推敲. 其中主要的思想就是,针对automation工作我们更多的focus点应该是Unit ...

  8. 软件测试模型 — 测试金字塔

    测试金字塔模型: ui测试 api测试 单元测试 探索性测试 端到端测试 系统测试 集成测试 单元测试 reference: The Practical Test Pyramid

  9. Day918.测试金字塔 -SpringBoot与K8s云原生微服务实践

    测试金字塔 Hi,我是阿昌,今天学习记录的是关于测试金字塔的内容. 软件质量是衡量一个软件是否成功的重要标准,在软件的生命周期中,如果没有良好的质量管控,很容易造成产品质量不满足客户预期,最终导致项目 ...

最新文章

  1. apache的prefork和workder模式
  2. linux下的Apache2 + mysql5 + php5 源码完整安装详解
  3. libev源码分析(一)libev数据结构整理
  4. [转载] python tuple类型如何索引_Python基础数据类型——tuple浅析
  5. C++设计模式(全网最通俗易懂的设计模式进阶)
  6. 如何在 Mac 上创建自动填充的智能文件夹?
  7. Linux 下mysql修改数据库存放目录方法和可能遇到的问题
  8. 图解形态学Morphological
  9. 如何让你的 x86 openwrt虚拟机上网
  10. frontpage 2010.2003绿色版
  11. 小刘的BUG(sql注入)
  12. 美团相关的scheme
  13. VLC2.2.4命令参数
  14. 用js做一个鼠标惯性动画
  15. 论文笔记(二十二):Soft Tracking Using Contacts for Cluttered Objects to Perform Blind Object Retrieval
  16. 如何让CFree5.0支持C++11
  17. ETSI开源MANO发布首个版本
  18. UE4 蓝图学习 FlipFlop
  19. 16.火星文转换 C#
  20. Android混淆、反编译基础教程

热门文章

  1. 计算机编程本质是什么意思,计算机编程的本质
  2. ps将手写字帖到图片上
  3. 运维大法之Linux系统中的文件传输
  4. ExploreKit使用
  5. 启动使用WampServer
  6. Genetic Algorithm遗传算法整理
  7. 追本溯源,解密第一性原理(上)
  8. 飞信提示无法连接服务器未响应,电脑无法连接网络并诊断提示DNS服务器未响应的解决方法...
  9. 深入理解java虚拟机百度云资源,全网独家首发!
  10. 基于JAVA忘忧小区物业管理系统计算机毕业设计源码+数据库+lw文档+系统+部署