接口测试的价值
接口测试是绕过客户端,对服务端测试。传统ui测试成本高,效率低,分层之后,通过接口测试快速保证我们后端服务的质量,后端服务质量保障了以后,对于前端测试来说,就省事很多了。
分层测试体系
-
单元,接口,ui,越往上走,测试时间介入的越晚,发现Bug就越晚,修复bug的成本就越高, 效率也逐渐变低。接口测试比ui测试,介入测试时间早,发现bug时间早,修复bug成本低
-
而且后端在开发完接口之后,前端还没写完页面,还没联调,但是只要接口开发完,就可以接口测试了。如果接口的质量保证好,到系统测试阶段,工作量会减少很多。
-
而且接口相对比较稳定,很容易做自动化,自动化成本比UI自动化成本小很多。收益也远远高于UI自动化
-
虽然接口测试很重要,但也不能替代UI测试,因为UI测试涉及到用户体验的一些测试
常见的接口协议
OSI七层模型
-
物理层: 用二进制的数据形式,在物理的媒介上去传输数据,在物理层解决的就是两个硬件之间怎么去通信的一个问题。定义一些物理的设备标准,比如网线的接口类型,光纤的接口类型,各种传输介质的传输速率等
-
数据链路层:传输有地址的帧,还提供错误检测功能,因为有了物理层,就可以通过物理媒介去发数据,但是数据发过去对不对,数据链路层可以确保传输过去的数据是可靠的。
-
网络层:为数据包选择路由
-
传输层:提供端对端的接口协议,把数据打包发送
-
会话层:建立或解除与别的接口的联系,建立管理应用程序之间的通信,程序可以自动收发包,寻址。
-
表示层:可以进行代码转换,数据转换,数据加密操作。可以在不同系统之间通信语法转换
-
应用层:具体的服务,如文件传输,邮件传输
TCP/IP四层模型
-
网络接口层:数据在主机和网络之间的传输与交互
-
网络层:解决主机到主机的通信
-
传输层:解决端到端的通信
-
应用层:为用户提供具体服务
RPC协议(了解)
HTTP协议
http协议端口:80
请求
-
请求行:method ,url ,protocal
-
请求方法:get, post, put, delete, head
-
请求头:host user-agent
-
请求体:json , xml , form
-
connection : keep-alive, 代表长连接
-
get请求,请求参数拼在url中,post请求,请求参数在请求体中
响应
-
响应行
-
响应头:
-
响应体:
URL(统一资源定位符)
RESTful架构
接口测试用例设计
接口测试流程
-
需求分析:测试需要对需求文档进行分析,梳理出业务逻辑。开发会根据需求文档整理出接口文档,测试写用例的时候,要根据需求文档和接口文档,一起设计用例
-
测试设计:
-
基本功能流程测试——冒烟测试:正向的主业务流程。
正向流程覆盖测试:覆盖不同的分支业务。覆盖的时候主要是分支覆盖,路径覆盖,场景覆盖。覆盖的时候要结合实际的业务场景,如果一个场景根本不会发生,则不需要考虑。 -
基于输入域测试:(针对接口中的字段设计用例),输入域,指接口中的入参,即请求参数。
这里要使用到边界值分析法,等价类划分法,判定表等。
如果入参规定了区间范围,则需要对该字段进行边界值测试。
如果入参对特殊字符有要求,则需进行特殊字符校验。
如果入参对参数类型有要求,比如只要求整数,或者要求字符串(只要求数字或字母),则需进行参数类型校验。
如果入参当中有要求必填的,对必填参数要设计一条不传的用例来验证必填性。
如果入参中既有必填参数,又有选填参数,要对不同参数的组合进行验证
有效性验证:比如身份证号,虽然符合身份证号的规则,但并不是真实有效的身份证号。
如果入参中有默认值,那么就要设计一条不传的用例,验证它的默认值是否正确。
-
接口幂等性:幂等操作的特点就是任意多次执行所产生的影响跟一次执行所产生的影响是相同的。
为什么要做幂等测试呢?因为有的时候用户会有一些重复的操作,比如重复的提交,或者因为网络的原因,会有网络重发或者系统重试等,都会造成重复的请求,所以要保证接口的幂等性,柚子涉及到资金的系统,比如银行,电商系统,幂等是有很重要的地位。 -
故障注入:
接口测试用例要素:用例名称,接口地址,请求方式,请求参数,预期响应结果
-
测试用例评审:
-
测试执行:接口测试的执行就是通过工具或代码去模拟客户端向服务端发送请求,并且接收服务端返回的响应数据,来对我们接口的功能和业务逻辑,以及性能进行测试,检验响应数据是否符合预期,如果符合预期,则用例通过,如果不符合预期,则需要提交bug,并且跟踪bug的解决
-
验收:
-
预发布:
-
上线:
postman基础使用
postman的优势
-
快速构建请求;提供响应结果的比较功能;查看测试结果;批量运行;设置环境变量
-
设置全局变量
- 设置测试集变量
- 设置环境变量
同名变量情况下,优先级如下: