一、什么是HTTP接口测试
先上图,如图是一个web项目常见的工作原理(当然还有其他层,这里先忽略)。
功能测试:
从前端browser测试功能是否符合需求(验证了前端+部分服务端)。
而我们所要做的接口测试,就是绕过真实的前端,虚拟一个前端,对服务端进行测试,验证服务端是否满足需求(验证服务端)
问题1:为什么说功能测试服务端验证是部分呢?
问题2:那么做接口测试的好处有什么呢?
二、接口测试的流程
接口测试的流程其实和功能测试的流程类似,因为都是依赖需求说明书,验证功能是否符合需求。
接口流程:需求讨论->需求评审(产出需求说明书)->开发进行设计(产出接口定义文档)->测试用例设计(依据前两个文档)->用例评审->开始测试(开发完成接口,这里如果是部分完成,可能会需要用到MOCK)
如上,测试用例设计是在开发完成之前设计,所以如果有能力的话,可以提出针对设计的建议,如状态码、响应正文、错误提示等的规范,增加可测性。
三、接口测试测什么
可对比前端功能测试,思考测试内容。
-
1、功能测试(正例):验证接口是否满足所需要提供的功能。验证正确入参请求的情况下,状态码、返回值、DB变化(DB这块视团队情况定是否验证,因为在做前端功能测试的时候也可以验证)等是否正确
-
2、入参异常(反例):类型异常、长度异常、是否为空异常、传null、参数不传、边界值、无效值
-
3、逻辑测试(其实应该单元测试做):验证内容逻辑是否正常
校验测试:验证正、反例的情况下,消息报头(cookies、status_code等)、响应正文、DB是否正常
PS:以上,属于测试时间、对产品熟悉度、对数据库熟悉程度、接口文档等维度都完美的情况下,测试case设计的粒度!
但是大多团队,经常以上的维度都是有所欠缺,或者是内部项目之类,case没必要设计到那种粒度。所以测试case设计的粒度可根据实际情况酌情调整。
四、测试数据准备
可对比功能测试,分两种情况
- 1、测试的模块无前置模块:直接动手,该用什么数据就写什么数据。
- 2、测试的模块有前置模块:获取前置数据的相关信息,其他同无前置模块的。
前置数据常用准备方法:
- ①通过前置模块的API生成数据
- ②在执行前,在数据库初始化插入数据
- ③一开始就准备好数据,执行后,对数据进行还原
PS:接口中可能会有一些唯一值字段,需要对其进行处理
五、选用Robotframework的考虑
测试方法比较多,接口测试工具、测试框架不少。
根据项目、团队实际情况,期望选择的方式可以有以下特点:
- 1、结果可断言(无需人工再介入)
- 2、良好的报告展示
- 3、易入手(团队里大多数测试成员不会测试开发)
- 4、可移植性高
- 5、现成的框架(性价比高,自己写底层重复造轮子太浪费时间)
- 6、可二次开发(针对实际项目做二次封装)
- 7、底层可添加、修改(针对实际项目情况做自定义库)
- 8、可做数据分离(可见性好,通过合理的架构设计,再次降低功能测试介入难度)
- 9、支持做
六、接口测试实现
接口测试实现部分,以大型项目中的实践来做说明
内容较多,在后面分篇说明。
另外有需要学习测试的朋友可以加我们的群(785128166),里面有各种测试资源,视频教程,面试题目,PDF教程,还有技术大牛答疑解惑。