API功能测试如何实施(转载自测试之道 微信公众号)
什么是API
关于定义什么的,直接维基可得:
API(Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划 分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的 相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
换句话说,API也可以看做程序/资源/组件的集成点。它的功能会跟UI有些类似,通过某些特定指令、参数等可以让后台的一堆代码运行起来,最后得到想要的结果。不同的是它不提供可视的按钮文本框之类的界面,而通常是由一个直接和底层代码打交道的链接构成。
什么是API功能测试
API测试是针对系统所提供的API做各方面的验证。API的性能和安全测试根据测试策略的不同,会是一个可选测试项。这个可以作为两个单独的问题来讨论。
API的功能测试类似于UI功能测试,都是在已知输入内容和期望结果的前提下,使用这个功能/调用这个API并且验证是否能返回期望的结果。不同的是API测试在返回结果被呈现给客户前就完成了,从而对测试环境的依赖会比较小。
为什么要做API功能测试
测试金字塔
在讨论这个话题之前,我们先来回顾下测试金字塔
如图所示。简单来讲就是说越往上层走的测试,需要投入的成本会越高,而且会越难以维护。在这个结构下,因为UT已经覆盖了绝大部分的代码,所以其上层的集成/API测试和UI测试可以去除重复测试的部分,从而量也会越来越少,并且会有不错的覆盖率。
所以理想中的自动化测试结构应该是大量的UT+适量的集成测试(或者API测试)+少量的UI测试。
构建API测试的价值
测试覆盖率。UT关注点是各个单元是否能够完成期望工作,只覆盖一个单元内部工作情况;集成/API测试关注点是各个模块/单元之间协同工作,它所覆 盖的场景也会比单元测试更多。而UI测试会更加关注e2e,模拟用户行为,在所有的程序依赖环境准备完成后再进行操作。相比之下API测试不依赖环境,测 试成本会比UI测试更低,而且覆盖率比UT更高。
快速反馈。API测试速度比UI测试更快(因为无需界面加载/响应),短时间内能跑很多用例。API测试也能精确的揭露是软件中哪个组件除了问题,如 果把你的API测试放到CI里面,一旦代码修改破坏了现有的功能,就能够快速反馈到团队中。还可以把测试中发现的BUG也写到API测试里面,让测试成为 一堵墙,从而能更好的能保证产品质量。
可复用。API测试由于不需要浏览器、GUI等环境,所以可以更加灵活的在各个环境中复用。例如你可以在产品环境中、测试环境、研发环境中使用,你需 要做的只是修改下测试数据而已。另外如果是在TDD模式下工作的话,API测试可能会在产品完成前就写完了,后续的工作也会减少很多。
怎么做API功能测试
API功能测试的主要手段是使用工具/软件调用待测API,然后验证是否返回期望的output。这个output通常可能是:
* 返回成功或者失败的status
* 是一段数据或者information
* 或者是跳转到其他API
工具
市面上常见的API测试工具我知道的可以分成几大类:
1、开源纯代码类,比如基于nodeJS的supertest,基于Java的rest-assured等,这类工具易于学习,易于和CI集成,但是需要使用者有一定的编码能力。
2、商用工具,比如SoapUI,功能强大操作简单,还提供免费社区办可以试用。
3、各类插件工具,比如Chrome插件Postman,也有收费版可以玩儿。
工具的选择见仁见智,根据不同的环境选择不同的工具。
测试
在正式开始测试之前,你得先搞清楚几个问题:
· 待测API的目的是什么,谁是使用者
· 待测API会在什么环境下使用
· 待测API在异常环境下会不会有非期望响应
· 这个测试需要测什么功能点
· 各个功能点的测试优先级
· 如何定义期望返回的结果是成功还是失败
· 待测API会不会和其他系统有交互(修改代码后影响其他系统)
这些问题会影响到你的测试结果是否符合客户需求,或者说这些潜在的风险会影响到这个项目是否成功。
如果你选的是必须得自己写点儿代码的工具,那么接下来得根据选择的工具和项目代码,去setup测试环境,让工具能够成功跑起来。
接着是设计你的测试框架,最好是要满足可复用性强,高内聚低内聚什么的原则,记得要有输出测试报告的模块。
然后是用例,上面你已经想好了需要测哪些功能点,针对这些点我们用脑图之类的工具把需要测试的场景记录下来。
最后就是脚本设计和测试数据设计,脚本和数据最好可以分开,这样的话可以复用测试脚本,用不同的测试数据输入去获取不同的期望结果。
验证的过程大致包含下面这些:
1、检查API是不是根据你输入的数据返回期望的结果
2、验证API是不是不返回结果或者返回异常结果
3、验证API是不是正确触发其他event或者正确调了其他API
4、验证API是不是正确更新了数据等等
完了就是输出测试报告了,好的测试报告可以帮助你轻松定位到出错的地方,使修复流程更加顺畅。
最后的最后,强烈推荐把测试集成到CI中去,加速异常反馈,创建墙有力的质量体系。
转载于:https://www.cnblogs.com/shuiyelifang/p/5894000.html
API功能测试如何实施(转载自测试之道 微信公众号)相关推荐
- 如何解决分布式系统中的“幽灵复现”?-转载自 阿里技术 微信公众号
阿里妹导读:"幽灵复现"的问题本质属于分布式系统的"第三态"问题,即在网络系统里面,对于一个请求都有三种返回结果:成功,失败,超时未知.对于超时未知,服务端对请 ...
- HTTP又被弃!微信公众号API仅支持HTTPS调用
为什么80%的码农都做不了架构师?>>> 上周,微信公众平台发布公告,要求开发者尽快将现有通过HTTP方式调用的服务切换为HTTPS调用,平台将于2017年12月30日停止对H ...
- 【Python爬虫】微信公众号历史文章和文章评论API分析
上一篇文章爬取微信公众号文章信息准备工作介绍了微信公众号历史文章和文章评论API的组成情况,历史文章API格式:https://mp.weixin.qq.com/mp/profile_ext?acti ...
- 解读微信公众号的推广运营之道
微信公众平台已成为目前最热的企业营销推广平台,每天都有大量互联网公司和传统企业进驻,使用公众账号通过移动端和粉丝互动,不仅可以群发文字.图片.视频.语音等信息内容,还可以进行一对一的深入沟通. 现在微 ...
- Simsimi 小黄鸡机器人最新无限制接口api simsimi机器人接口api 微信公众号
一.什么是Simsimi? simsimi公司是提供智能服务,其中一个服务是simsimi聊天机器人服务,每天有超过百万的用户聊天,国内最大的搜索引擎--百度的产品siri使用的就是simsimi提供 ...
- 微信公众号api关注接口php,微信公众平台接口开发入门示例
本文实例讲述了微信公众平台接口开发入门示例.分享给大家供大家参考.具体如下: 微信公众平台的接口开发是一个现在比较常用的功能了,很多的人都会去了解一下微信公众平台一些简单开发应用,这里就来给大家介绍一 ...
- 转载:使用pythonr脚本实现微信公众号音频批量下载
文章转载自:https://blog.csdn.net/lpwmm/article/details/108722225 原文作者给出详细的步骤,感谢分享.这里一方面对资源做个备份,另一方面对失效链接终 ...
- 微信公众号官方API开发之配置服务器
最近进行微信官方API开发,需要知道用户的openid,以及需要扫码传参数,需要进行服务器配置. 1.服务器配置 微信公众号要开通开发者模式,然后在最左下角 开发->基本配置->服务器配置 ...
- 互联网广告新规实施 微信公众号发“软文”须标明
用百度搜索关键词,出来的结果到底是正文还是广告:睡前刷刷微信公众号,故事快看完才发现是一篇套路颇深的"软文":浏览网页时,弹出的小广告怎么也关不掉--这些上网时的困扰,将有望得到改 ...
- 微信公众号基于 baidu API接口的图像识别
接入: https://login.bce.baidu.com/?redirect=https://apis.baidu.com/store/list?cid=130001 maven 依赖 < ...
最新文章
- Excel实用小技巧
- MSSQL中的随机函数
- spring boot报错:Unable to start embedded Tomcat server 权限不够
- android ContentObserver监听系统短信和备份短信到本地
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
- java线程池应用的好处_java高级应用:线程池全面解析
- 额,看房没戴头盔,损失二十万 。。。
- 巧做辅助线计算三角形角的度数
- uni-app中使用lodash_Vue 使用中的小技巧
- mysql语法替换字符串
- ADO.NET- 基础总结及实例
- 读《大道至简》第三章 有感
- java统计每个单词单词出现的次数_(java)统计若干段英文中的单词数量,并统计每个单词出现的次数按降序排序。...
- python垃圾回收机制gcgo_python垃圾处理机制
- 基于Easyui框架的datagrid绑定数据,新增,修改,删除方法(一)
- 潦草字体在线识别_想要知道某些字是什么字体?帮助你以最快的方式识别
- 矢量网络分析仪(矢网)组成和原理简介
- 感知机原理以及python实现
- 第八届中国大学计算机设计大赛,2015年(第八届)中国大学生计算机设计大赛.PDF...
- JSP九大内置对象是什么?
热门文章
- python socketserver并发实例
- appserv+win8
- 常用正则表达式(不断更新ing...)
- antd的Tree控件实现点击展开功能
- codevs 4189 字典
- Linux基本操作笔记
- 2016/7/7 设置wamp2.5 mysql密码 重点是mysql版本
- 编程中无穷大常量的设定技巧 2014-08-19 09:22 35人阅读 评论(0) 收藏...
- Visual Studio 自定义控件不显示在工具箱
- Entity Framework 笔记(一)