什么是接口测试?
接口测试是测试系统组件间接口的一种测试,主要用于检测系统内部各个子系统之间,系统内部与外部系统之间的交互、相互逻辑依赖等。
通俗讲就是接口的提供方、接口的调用方之间的交互、逻辑处理。
相较于UI测试,接口测试提前了一步,在客户端和服务器交互的中间做接口测试,可以不用等待前端开发好,提前开始测试。
目前我们做的是软件接口的测试,本质是基于某种协议(http),发送一个Request请求给服务器,然后服务器返回一个Response响应数据,然后对响应数据进行分析,判断是否与我们预期的返回一致,从而验证功能是否正确,这就是接口测试。(属于黑盒测试)
如何获取接口信息?
1、开发提供详细接口文档(实际测试常用)
2、通过工具抓包(charles、fiddler、web端F12)
(tips:浏览器按F12可以快捷打开调试页面进入开发者模式,或者右键进入开发者工具)
URL:http[s]://host[:port]/[abs_path]?[parameter]
host:域名/ip
port:端口
abs_path:进入目标软件后想要找的地址
parameter:参数
http知识点(下面只做简述,详细参考https://zhuanlan.zhihu.com/p/101158095)
Header:头信息,包含报文的描述信息,一些限制要求;
Method:请求方法
Request Parameter:请求参数
Response Status:响应状态码
Response Status常见几种
2开头:正确,eg:200
3开头:需要重定向,eg:302
4开头:请求有问题(你错了),eg:404
5开头:服务器错了(开发错了),eg:500
为什么做接口测试?
UI测试模拟用户真实操作,更贴合实际应用,但缺点是强依赖于UI页面,前端页面一改,自动化脚本就要修改。
接口测试并不依赖UI,更加稳定,一般的接口写好后就不会随意更改,当一个系统提供了大量的后台服务,有较少甚至没有页面操作,就比较适合开展接口测试。
测试难度:UI>接口>单元测试(开发在做)
工作中接口测试流程:
1.准备阶段(25%)
拿到开发的接口文档,理解每个接口的参数和含义;
了解被测系统的业务流程;
编写接口测试用例;
2.执行阶段(70%)
测试用例/测试场景执行(照着用例去Postman中配置)
测试数据/系统数据收集
3.分析阶段(5%)
数据汇总/日志分析
测试报告
接口测试规范文档:
为了提高测试效率,前期需要推动开发规范接口说明文档(TDD模式,测试驱动开发)
web端如何获取接口?
Charles、fiddler、F12
通过接口也可以判断bug原因,若接口返回正常则为前端bug,返回错误则为后端bug。
接口测试用例内容:
用例ID、项目名称、模块、接口名称、请求方法(get/post)、URL、请求参数、前置条件、操作步骤、预期结果、实际结果、测试人员、备注(post的话需要到数据库查看)
接口用例编写要点(重点还是参数的取值):
1.测试每个参数类型不合法(注意null)
2.测试每个参数取值范围不合法(边界值)
3.参数为空(不同于null,空值为传参,但是该参数为空)
4.参数前后台定义一致性
5.参数的上下限处容易出致命bug
6.参数取值不合理的情况(比如取的值在该阶段不应该出现)
7.如果两个请求有严格的先后顺序,应考虑调换顺序
注意:用例设计一般考虑参数的组合、极值、是否必填,类型一般不测,因为在数据库中会现在类型,前台用户没办法发起错误类型的请求。
接口测试流程(团队中):
与测试流程类似
1.与开发、产品梳理需求,确定实现哪些接口和功能
2.编写测试计划(开发预估开发时间,风险评估及解决时间,测试人员用例准备,数据准备,环境准备,与开发和产品协调测试时间)
3.测试计划review,请各部门再沟通,确定最终计划
4.编写测试用例和自动化脚本
5.用例review(该用例为最终版本)
6.执行测试,bug提交,回归
7.测试总结(包括测试、开发中遇到的问题,如何解决,对自己的启发等)
fiddler原理:
fiddler作为浏览器的代理,在信息请求和响应中间进行了拦截,所有的浏览器都可以抓取。
COOKIE:浏览器生成的一串标志身份的信息,相当于身份证,有失效时间,在测试时用变量填充。
Postman中的传递参数:
Params:请求参数,url中?后面的,一般为get请求中的参数,用来筛选所需要查询的信息。
Header:请求头,一般是content-type(传递参数的类型,post时需要加)+COOKIE(身份信息)
Body:需求上传的数据写在Body中,一般Post中才需要。
接口断言
CC是谁:【笔记】Postman中接口断言方式zhuanlan.zhihu.com
1.响应状态码
2.响应中包含某字符串(html格式)
3.json中某个key值(json格式)
4.断言响应时间