一、接口及接口测试定义
1、接口
API全称Application Programming Interface, 接口就是一个位于复杂系统之上并且能简化的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口,就可以达到登录系统的目的。
人类与电脑等信息机器或人类与程序之间的接口称为用户界面(UI接口)
电脑等信息机器硬件组件间的接口称为硬件接口
电脑等信息机器软件组件间的接口称为软件接口
常见的接口名词:
HTTP接口:Web Service接口等基于某种网络协议提供的接口服务
API接口:应用程序编程接口,不一定通过网络提供编程服务接口
2、接口测试
接口测试是测试系统组件间一种测试。接口测试主要用于检测外部系统与内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
A、接口测试流程
(1)测试接口文档(需求文档)
(2)分析接口文档,根据接口文档设计以及编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值、场景法等设计方法)
(3)执行测试,查看不同的参数请求,接口的返回的数据是否达到预期
(4)得到测试报告
接口文档分析:
- 接口名称:表明接口作用
- 接口的请求方式:POST、GET
- 接口的请求地址:URL、HTTP/HTTPS
- 接口的请求参数:必填项,选填项测试,如果文档说明了选填参数的相应情况,则也要设计用例进行覆盖
- 接口的业务功能
- 接口的返回值:返回格式----->xml/json json偏多;返回参数:预期结果对比
测试结果记录模板:
面经:(1)如果测试接口文档存在问题该如何处理?
首先,使用抓包工具抓取对应的值,对比结果和所表现的功能是否一致,如果一致,则说明自身读取问题;不一致,开发人员问题,找开发核实;
(2)如果不存在接口文档,可以进行接口测试吗?
首先可尝试询问开发是否有接口文档,排除开发忘记给的可能;
如果没有接口文档,可使用抓包工具(Fiddle)对接口进行抓包操作,根据获取到的数据分析接口的功能,从而获取接口文档。
B、接口测试工具
- 抓包工具:Fiddle、Charles、Wireshark
注:fiddle、Charles------>对HTTP协议进行抓包;Wireshark------->对底层协议进行分析 - 接口测试工具:
工具类:postman、jmeter、soapui、Loadrunner等
代码类:Java---->httpclient、Python---->requests、httprunner
C、fiddle抓包步骤
(1)进入fiddle响应界面,输入相关数据
(2)启动抓取状态
(3)切回应用,向服务端发送数据,并且得到相应响应
(4)选择响应的请求,分析抓取结果
注:使用fiddle的前提条件:关闭系统防火墙,退出杀毒软件(Win10自带的除外)
D、PostMan接口测试流程
- 使用PostMan进行接口测试流程: 需求文档 -> 根据需求文档设定测试计划 -> 测试用例 ->执行 -> 测试报告
打开postman 输入开发人员给的接口地址,选择Http请求,点击“send”按钮,即可查看返回结果
http请求常见的是get,post请求。Get请求在传参跟post请求的区别:get请求在params中体现在url中,而post请求书写在body中,不体现在url中。
面试继续引申:post数据类型有哪些?None、from-data 、x-ww… Get -> URL 中 Post请求 ->
Body体 None不需要参数,form-data 可以传文件.txt 或 Text 文本信息键值对 X—www表单个数 键值对
Raw -> 文本 html json … Binary 上传文件,以多媒体文件为主
- 如何分析一个bug是前端还是后端的? 平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug。 这种情况很容易判断,先看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯
E、PostMan接口实例演示
PostMan中各选项作用:
PostMan批量测试实例:
(1)关闭环境变量
(2)选中请求所在文件夹,点击run
F、PostMan接口变量
PostMan提供了4种变量类型:环境变量(Environment Variable)、本地变量(Local Variable)、全局变量(Global Variable)、数据变量(Data Variable)
a、环境变量
环境变量:-> 针对于选择这个环境的接口
环境变量值在同一个变量值随着环境的不同而变化。
比如测试环境和生产环境只是host不同,那就可以吧host设置成一个变量,当切换成测试环境用的就是测试环境的host,切换到生产环境就是生产环境的host。
http://{{testhost}}/ -> 测试环境下的 测试结果
针对测试环境进行设置变量,如测试环境,线上环境,预发布环境
b、本地变量
主要是针对单个url请求设置的变量,作用域只是局限在请求范围之内
Url: http://apis.juhe.cn/simpleWeather/query?city={{city}}&key=331eab8f3481f37868378fcdc76cb7cd
c、全局变量
当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量
全局变量在所有的环境里,变量值都一样,全局变量的作用域是所有请求
全局变量设置方式:界面设置/脚本设置
d、数据变量
-参数化 批量测试
数据变量是通过导入外部数据文件(txt 文件 json文件或CSV文件),来获取变量数据
接口地址
http://apis.juhe.cn/simpleWeather/query
请求参数
city:要查询的城市名称/id,城市名称如:温州、上海、北京,需要utf8 urlencode
key:331eab8f3481f37868378fc
优先级:数据 < 本地 < 环境 < 全局
PostMan不能做接口自动化,可以批量进行接口测试,提高工作效率
G、Get和Post请求区别