文章目录
前言
全面了解接口理论基础、测试流程
一、全面了解接口、接口测试
1.什么是接口
- 接口(硬件类接口):是指同一计算机不同功能层之间的通信规则称为接口
- 接口(软件类接口):是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员
- 软件接口的本质:就是一个方法或函数,通过这个方法或函数直接调用数据库的数据内容
2.接口分类
- 硬件接口:USB接口,投影仪接口,鼠标键盘接口等
- 软件接口:称为API,微信:提现和充值等
- 内部接口:开发人员开发的一个系统,此系统提供了一些接口给本系统使用
- 特点:对于安全要求不高,外界访问不到的,只需要进行正例测试
- 外部接口:系统对外提供的接口,这种接口外部的用户是可以直接使用的,对于安全性比较高
- 系统调用外部接口:第三方接口,直接调用,微信支付,支付宝支付等功能都属于第三方接口
- 被测项目调用外部项目的接口。(一般只测正例不测反例)
- 被测项目提供给外部项目调用的接口。(正例,鉴权反例,参数反例,业务反例,兼容性用
例)
- 内部接口:开发人员开发的一个系统,此系统提供了一些接口给本系统使用
3.接口测试的作用
- 验证接口的正确性
- 提高代码覆盖率
- 提高系统性能
- 缩短测试周期
- 保障系统稳定性
总之,接口测试是保障软件系统的正确性、稳定性、安全性的重要手段,数软件测试中必不可少的一环
4.为什么要做接口测试?
- 前后端分离架构:联调问题(1.接口变更,接口文档没有同步更新 2.字符串1和数字的1不一样 3.参数长度限制 4.鉴权)
- 安全考虑:前端的功能测试很容易被绕过。需要做接口层面的验证。
- 接口测试本质:通过测试不同的情况下输入参数和与之对应的输出结果来判断接口是否符合相应的功能、安全、性能要求。
5.什么时候做接口测试?
- 接口测试的介入时间:需求评审澄清之后,前后端开发会对接接口文档,达成一致之后已经输出了接口文档。
- 接口测试的测试时间:后端开发把接口开发完成之后,并且达到提测的要求,就可以开始进行接口测试了。
6.接口测试的周期
- 接口数量不多,一个人就可以完成,可能是一周就可以了。
- 接口数量巨大,需要多个测试协同测试,可能需要1-2个月。
7.接口测试的重点
- 1.接口参数
- 2.接口返回数据的正确性
- 3.鉴权
- 4.异常时的容错处理或错误提示
- 5.兼容性
8.主流接口测试工具和持续集成
- JMeter + Ant + Git + Jenkins
- Postman + Newman + GIt + Jenkins
- Apifox + CIi + Jenkins
- 其他:SoupUI,Apipost
二、详细了解目前市面上的接口设计架构以及基于的协议
1.接口设计架构
- 1.基于soap的接口架构:它是一个轻量级的简单的基于XML的协议规范
- 基于webservice协议的接口,接口地址一般是:
http://......?wsdl
结尾,是一个比较古老的方式,目前银行普遍在使用。
- 基于webservice协议的接口,接口地址一般是:
- 2.基于RPC的接口架构:它是一种远程调用,调用服务器的服务接口和调用本地一样
- 基于dubbo协议,阿里的rpc的架构,接口地址:
dubbo://.......
适合传输高并发数据量少的数据
- 基于dubbo协议,阿里的rpc的架构,接口地址:
- 基于restful的接口架构:比较主流的架构,默认使用http协议(https=http+ssl)
- 接口地址:
http://.......
- 默认使用JSON数传数据
- 对于同一个接口的访问,可能使用不同的请求方式,得到的结果也不一样
- 查询数据(get),增加数据(post),修改数据(put),删除数据(delete)
- 接口地址:
2.http协议的详解(http协议使用80%-90%)
1.什么是http协议?
- 什么是http协议:超文本传输协议,主要是用于浏览器和服务器之间数据交互,交互分为请求,和响应两部分
- 请求:请求行,请求头,请求正文数据
- 请求行:
请求方式,请求路径
,协议 请求头:
User-Agent:客户端的类型
Accept:客户端接收的数据类型
X-Requested-With:异步请求(ajax,局部刷新)
Content-Type:(内容的格式)
application/json(json格式)
application/x-www-form-urlencoded(表单)
...
Cookie:cookie信息
- 请求行:
- 响应:响应行,响应头,响应正文数据
- 响应码:1xx信息,2xx请求成功,3xx重定向,4xx客户端请求错误,5xx服务器错误
请求:
POST # 请求方式
/phpwind/index.php?m=u&c=login&a=dorun HTTP/1.1#(协议版本) # 资源请求的路径
Host: 47.107.116.139 # 服务器的主机地址(端口号)http默认端口号是:80,https:443
Connection: keep-alive # 和服务器保持长连接
Content-Length: 117 # 内容长度:是以十进制的数字表示八位字节的数目
Accept: application/json, text/javascript, */*; q=0.01 # 客户端可以接受的数据类型
X-Requested-With: XMLHttpRequest # ajax异步请求(不需要刷新),高速上面的多条通道
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/105.0.0.0 Safari/537.36 # 用户代理,也就是客户端的名称
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 # 服务器可以接收的数据类型
Origin: http://47.107.116.139 # 起源
Referer: http://47.107.116.139/phpwind/index.php?m=u&c=login # 引用页
Accept-Encoding: gzip, deflate # 可以接收的压缩格式
Accept-Language: zh-CN,zh;q=0.9 # 可以接收的语言
Cookie: # 登录用户的身份识别
Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1677215402,1677477263,1677502001,1677565904;
csrf_token=8e652f0228a72fe4; W2S_visitor=RHFitGJUWa%2FQmyYR3jKSWtYs8yzmOyv7it3ORrb0ub0%3D;
W2S_lastvisit=6481%091679664028%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Dchecknam
e # 请求正文数据
响应
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 24 Mar 2023 13:20:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36
Set-Cookie:
W2S_lastvisit=6483%091679664030%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Ddorun;
expires=Sat, 23-Mar-2024 13:20:30 GMT; Max-Age=31536000; path=/
Vary: Accept-Encoding
Content-Length: 327
三、接口测试流程
1.查阅接口需求文档(确定测试范围)
-
接口文档方式:wsagger,showdoc,word,抓包或者录制
-
通过接口需求文档能获取到的信息:熟悉接口业务,查看说明,了解鉴权方式,了解入参方式,了解出参方式,了解错误码等等
- 1.接口功能描述
- 2.请求的URL地址
- 3.请求的方式
- 4.获取接口的请求数据
- 5.响应数据的相关信息
- 6.错误码相关信息
-
APP和WEB凡是有数据交互的地方必定有接口调用。
2.编写接口测试计划、用例和评审
-
如何编写接口的测试用例:
- 与编写功能测试用例的方法是相同的
-
接口测试用例设计思路:
- 正例:正确输入必填的参数,接口正常返回。
- 反例:
- 鉴权反例:鉴权码必填,鉴权码错误,鉴权码过期 …
- 参数反例:参数必填,参数类型异常,参数长度异常,错误码异常(根据业务定)
- 其他场景反例:分页,黑名单,接口调用次数限制,接口调用时间的限制,接口服务费
- 兼容性用例:多版本的兼容,多端的兼容。
-
一般思路:
- 正例
- 正确的请求数据(url+请求头+请求参数)得到对应的数据
- 反例
- 一、参数异常
- 1.参数为空
- 2.参数类型异常
- 3.参数长度异常
- 4.等等…
- 二、鉴权码异常(cookie、session、token)
- 1.鉴权码为空
- 2.鉴权码错误
- 3.过期的鉴权码
- 三、错误码
- 1.根据业务而定义
- 四、其他错误场景
- 1.根据业务而定义
- 一、参数异常
- 正例
-
接口用例模版包含的内容:
- 1.用例编号
- 2.接口模块
- 3.用例标题
- 4.请求头
- 5.请求方式
- 6.接口地址
- 7.请求参数
- 8.接口返回预期结果
- 9.接口返回实际结果
- 10.备注
3.使用接口测试工具执行接口测试用例
- 常用的接口测试工具
- 1.JMeter
- 2.Postman
4.提交bug、bug跟踪及管理
- 接口测试的实际结果与预期结果不一致则会提交bug、bug跟踪及管理
5.分析测试结果输出接口测试报告
四、接口测试的重点
- 测试接口的功能实现:检查接口返回的数据与预期结果一致性
- 测试接口的容错性:例如传递的数据类型是错误的内容能否正常处理
- 测试接口参数的边界值:例如传递数据足够大或者为负数时能否处理
- 测试接口性能:接口处理响应数据的时间也是测试一方面,这涉及到性能调优
- 测试接口安全性,第三方接口,比如说登录的用户名和密码是否密文传输
五、接口返回的数据格式
1.json数据格式
-
json数据格式:90%接口在设计的时候基本上默认的三个字段
{error__code:错误码,message:错误码的中文说明,result:返回的具体数据内容}
-
json数据格式的优势:是一种轻量级的数据交换格式,比较简洁,易于阅读和编写,也更加适合用于网络传输,效率高
-
json数据格式类型:(对应的python中的数据类型)
- 对象------字典
- 数组------列表元组
- 字符串------字符串
- 数字类型------整数,浮点数
- 布尔值------布尔值
- 空值null------none
2.html格式
- html格式:用来显示数据
3.xml格式
- xml格式:用来传输和存储数据