目录
1、什么是接口
-
接口是前端和后端实现数据通讯的桥梁
- 本质是实现数据的传入和传出的过程
-
接口就是软件中实现数据通讯、交换的代码
2、接口分类
-
1)按软件结构划分
-
可以分为系统内部接口和系统外部接口
- 系统内部接口是指系统与子系统之间、模块与模块之间的接口【自己项目的】
-
外部接口是指系统与第三方系统之间的接口【别人公司提供的】
-
-
2)按技术实现划分
-
可以分为http接口和webservice接口
- http接口:
-
基于http协议所实现的接口,主要通过模拟发送一个http请求给服务器
-
服务器会进行返回一个http响应结果,且响应只能响应一次
-
该类型接口是主流的应用接口
-
测试可以使用的工具较为广泛
-
接口响应的格式大多是json格式
-
另外还有xml(html)、text等格式
-
-
webservice接口
-
也称为soap接口,SOAP【Simple Object Access Protocol】简单对象访问协议
-
主流的webservice的管理使用wsdl【基于xml格式所描述的语言】
-
通常使用SoapUI工具实现接口测试
-
该接口响应的格式一定是xml格式。
-
一般接口类似”/xxx接口地址?wsdl"这样的
-
- http接口:
3、第三方接口
-
第三方接口是由第三方公司直接提供,可以通过第三方接口平台获取【聚合api、通联api、ApiStore】
-
第三方公司直接提供的公共接口【支付宝、微信】也属于第三方接口
-
第三方接口实例:
- 聚合api: 聚合数据 - API接口开放平台_API接口大全_免费API数据接口服务
-
支付宝api: 开放平台
-
微博开发api: Api - 微博API
4、接口的管理方式
-
接口的管理方式,一般有以下几种:
-
1)传统的api接口管理方式是通过word文档管理,即api文档
-
2)通过接口管理平台管理接口,如SwaggerUI,Showdoc,Eolinker,easyAPI,YAPI,DOClever等
-
3)使用公司自研的工具进行管理,一般大公司才有
5、接口测试
-
1)什么是接口测试
-
定义:
-
接口测试是测试系统组件间接口的一种测试。
-
接口测试主要用于检测外部系统与系统之间以及各个子系统之间的交互点。
-
测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
-
简单地说,接口测试就是测试后端的接口
-
请求后端接口传输我们想传输的数据
-
然后观察返回的是不是我们预期想要的结果的过程
-
-
-
-
-
2)为什么要做接口测试
-
【1】越底层发现bug,修复成本越低【越早发现bug,修复成本越低】
-
【2】前后端按约定的接口开发,接口测试好了,前端随便改,后端不用变
-
【3】如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案
-
【4】接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试的人力和时间成本,缩短测试周期,支持后端快速发版
-
【5】现在很多系统前后端架构是分离的,从安全层面来说:
- 只依赖前端进行限制已经完全不能满足系统的安全要求【绕过前端相对容易】,需要后端同样控制,在这种情况下就需要从接口层面进行验证;比如电商购物平台,前端加个不可能传入-1元,但是通过接口可以传入-1元。
-
前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如登录密码、身份证、银行卡等。
-
-
3)什么时候进行接口测试
-
系统开发早期,在后端接口开发完成的时候就可以启动接口测试,因为越早发现问题,解决的成本越低
-
对于持续迭代的项目,每轮迭代的时候可以对系统的接口做自动化回归,相比web自动化,接口自动化可以排除前端对自动化代码的影响
-
-
4)接口测试的流程
-
a)理解需求,根据需求规格说明书、接口文档进行业务梳理
-
b)接口用例设计
-
c)准备测试数据
-
d)部署测试场景、环境【包括接口运行环境、测试工具、测试脚本等】
-
e)执行测试用例
-
f)bug的定位与跟踪
-
g)接口测试报告输出
-
-
5)接口测试的测试点
-
[x]接口的功能实现
-
验证接口的功能是否按照API文档正确的实现
-
逻辑业务测试验证接口之间是否有依赖业务,比如查看订单,需要用户先登录,如果不先调用登录也可以查看则不符合业务规则
-
异常测试
-
包括参数异常与数据异常两种,其中:
- 参数异常:关键字参数、参数为空、多传、少传、错误参数等
-
数据异常:关键字数据,数据为空、长度不一致、错误数据等
-
关键字参数和关键字数据,指的是在传入参数或数据时,有意的传入java中的关键字,比如class、public等
-
接口的性能
- 响应时间、吞吐量、并发用户数、占用内存、cpu等
-
接口的安全性
- 比如敏感信息是否加密,必要的参数是否前后端都进行了限制、不带cookie是否能获取数据、不带header是否能获取数据等。
-
练习:bpm登录接口,接口规格如下:【设计接口测试用例】
-
-
-
6、接口常见bug及问题
-
1)传入不合法的参数,导致程序异常
- 500异常
-
2)数据类型值溢出,导致数据读出和写入不一致
- 实际结果和预期结果不一致,返回的错误的值
-
3)对象权限未校验,可以访问其他用户敏感信息
- 不安全,比如未登录,能访问需要登录后才能获取的信息
-
4)状态处理不当,导致逻辑出现错乱
- 比如session、token等
-
5)逻辑校验不完善,可以利用漏洞获取非法利益
7、接口测试用例
-
[针对接口的输入、输出来进行考虑
- 输入
- 参数的类型来设计
- 比如是整形还是字符串
-
是字符串,还是对象列表
-
分隔符是,还是;还是-等
- 很可能前端传入参数不对,会导致bug
-
输出
- 根据返回的结果来设计
-
有些接口是没有输出的,但是它会进行一些逻辑的处理
- 这个时候需要考虑,它处理得对不对
- 比如调用这个接口后,普通会员就升级成了金牌会员
-
还有你从青铜直接升级到了王者!
-
。。。
- 这个时候需要考虑,它处理得对不对
- 参数的类型来设计
- 输入
-
✅数值型
-
-
1)等价类
-
2)边界值
-
3)特殊值
- 比如0, -1, true, false, null等【视情况而定】
-
4)遍历法
-
eg。
- 一个输入值的范围为int 1~12
- 考虑边界值0,1,12,13
-
考虑特殊值-1,0
-
考虑int类型的数据溢出,比如小于最小值,大于最大值:-2147483648, -2147483648, 基本程序都是java开发的。
- 一个输入值的范围为int 1~12
-
-
✅字符串
- 1)等价类
-
2)边界值
-
3)特殊字符
-
4)字符串内容
- 英文、中文、大小写、敏感数据字符等
-
✅列表或者字典类型的json数据
- 1)元素个数
- 还是可以使用等价类、边界值、特殊值如0等来考虑设计
-
2)元素内容
- 是列表套字典,还是字典套列表,还是字典套字典,列表套列表等
-
元素内容合法、非法等
-
是否允许重复等
-
- 是列表套字典,还是字典套列表,还是字典套字典,列表套列表等
- 1)元素个数
-
✅逻辑实现
- 1)业务逻辑是否正常实现
-
2)错误猜测法
-
3)流程法
-
考虑各方面去验证
-