一、接口
1.1 概念
接口可分为:硬件接口和软件接口,我们这里只关注软件层面的接口。
接口:是指系统或组件之间的交互点,通过这些交互点可以实现数据的交互。(数据交互的通道)
系统与系统之间,组件与组件之间,数据传递交互的通道。
1.2 接口的类型
接口测试分类有许多种,
- 按照协议划分:http,tcp,IP
- 按照语言划分:C++,java,php…
- 按照范围划分:系统之间的接口和程序内部的接口
- 系统之间的接口:多个内部系统之间的交互,内部系统与外部系统之间的交互。
- 程序内部的接口:方法与方法之间,函数与函数之间,模块与模块之间的交互。
二、接口测试
2.1 接口测试概念
是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。
2.2 接口测试原理
模拟客户端向服务器发送请求,服务器接收请求后进行相应的业务处理,并向客户端返回响应数据,检查响应数据是否符合预期。
接口测试,主要针对的测试目标 – 服务器
测什么? 测试 服务器针对客户端请求,回发的响应数据是否与预期结果一致。
用什么测? 工具:fiddler、postman、jemter。 代码:python + UnitTest框架 + Requests框架。
怎么测? 模拟客户端,向服务器发送请求。
人眼对比、断言。
2.3 接口测试的特点
测试可以提前介入,提早发现bug,符合质量控制前移的理念。
可以发现一些页面操作发现不了的问题。
接口测试低成本高效益(底层的一个bug能够引发上层8个左右bug,接口测试可以实现自动化)。
不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测。
2.4 实现方式
工具:JMeter、postman、fiddler。
代码:python + UnitTest框架 + Requests框架
2.5 自动化接口测试
借助工具、代码,模拟客户端发送请求给服务器,借助断言自动判断预期结果和实际结果是否一致。
三、HTTP协议(重点)
协议:就是规则。要求通信的双方必须严格遵守!
3.1 HTTP协议简介
HTTP:超文本传输协议(HyperText Transfer Protocol),是一个基于请求与响应模式的、应用层的协议,也是互联网上应用最为广泛的一种网络协议。
IP地址是在网络中唯一标识一台主机。
3.1.1 HTTP协议的特点
- 支持客户端/服务端模式
- 简单快速
- 灵活
- 无连接(IP + 端口)
- 无状态
3.2 URL格式(重点)
URL:(Uniform Resource Locator)统一资源定位符,是互联网上标准资源的地址。
作用:在网络环境中,唯一的定位一个数据资源。
URL语法格式(组成):http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
- 协议:http,规定数据传输的方式。
- 域名(IP):相当于IP地址。在网络环境中,唯一标识一台主机。 – 用:// 与协议隔分
- 端口(port):(常省略)在网络主机上,标识一个进程(应用程序)。-- 用 : 与域名隔分。端口号的范围:0~65535。可以省略,http默认80,https默认443.
- 资源路径:标识网络资源(文件、图片、音视频、变量…)-- 用:/ 与端口隔分
- 查询参数:传递给资源路径对应的数据。-- 用 ? 与资源路径隔分,查询参数内部用 & 隔分多个键值对
练习
请写出以下URL的各个组成部分,这个URL没有写出端口号,它的端口号是什么?
http://www.itcast.cn:8080/news/index.html?uid=123&page=1
协议:http
域名:www.itcast.cn
端口号:8080(不是默认端口,只不过网络通信常用)
资源路径:/news/index.html
查询参数:uid=123&page=1
3.3 HTTP请求(重点)
作用:客户端(app、浏览器),发送请求给服务器时,使用的协议 – http请求协议。
规定 发送给服务器的数据传输的语法格式。
3.3.1 整体格式
- 请求行:http请求第一行。请求方法(空格)URL(空格)协议版本
- get:查询
- post:添加(常用在登录)
- put:修改
- delete:删除
- 请求头:语法格式:k:v
- User-Agent:描述 请求发送端的 浏览器类型
- Content-Type:描述 请求体的 数据类型
- text/html:HTML格式
- text/plain:纯文本格式
- image/jpeg:jpg图片格式
- application/json:json数据格式
- application/x-www-form-urlencoded:form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据格式)
- multipart/form-data:在表单中进行文件上传时使用
- 空行:代表http请求头结束。
- 请求体:请求发送时携带的数据。数据类型 受Content-Type的值 影响!
- post 和 put 有请求体
- get 和 delete 没有请求体
3.3.2 fiddler抓包验证
练习
以下是抓取的某个http协议数据包的请求报文,请问其中,请求行、请求头、请求体分别是什么?url 的各个组成部分是什么?
请求行:第一行
请求方法:post(有请求体,常用在登录、添加)
URL:http://tpshop-test.itheima.net/index.php
协议版本:HTTP/1.1
协议:http,域名:tpshop-test.itheima.net,端口号:80,资源地址:index.php,查询参数:没有
请求头:第2-16行
浏览器类型:Mozilla/5.0
请求体数据类型:form
请求体:第18行
key:value
3.4 HTTP响应(重点)
作用:服务器端,针对客户端发送的http请求,回发响应数据。–http应答
规定 回发给客户端的数据组织格式。
3.4.1 整体格式
- 响应行(状态行):协议版本(空格)状态码(空格)状态码描述
- 状态码有三位数字组成,第一个数字定义了响应的类别:
- 1xx:指示信息 --表示请求已接收,等待继续处理。
- 2xx:成功 --表示请求已被成功接收、理解、接受。
- 3xx:重定向 --要完成请求必须进行更进一步的操作。
- 4xx:客户端错误 --请求有语法错误或请求无法实现。常见:404 访问文件不存在,403 访问的文件拒绝访问。
- 5xx:服务器端错误 --服务器未能实现合法的请求。
- 状态码描述:一般与状态码 唯一对应。200 --OK;404 --file not found
- 状态码有三位数字组成,第一个数字定义了响应的类别:
- 响应头:语法格式:k:v
- Content-Type:描述 响应体中数据类型。
- Content-Length:响应体的大小。可以不写,浏览器会自动求取。一旦写,必须准确。
- 空行:代表响应头结束。
- 响应体:回发给客户端的 数据,绝大多数不为空。(请求成功:回发数据;失败:回发错误信息)
- 数据类型受 Content-Type的值 影响!
- 在测试中,就是“实际结果”。
练习
以下是HTTP协议的响应报文内容,请问 状态行、响应头、响应体分别是哪几个部分?
3.5 传统风格接口
对用户进行操作的相关接口,包括增删改查。
特点:
- 请求方法,只使用get和post即可。
- URL不唯一。同一个操作可以对应不同的URL。
- 状态码的使用较单一。200最常见。
3.6 RESTful风格接口
3.6.1 定义
一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
REST:即(Representational State Transfer)的缩写。词组的翻译是“表现层状态转化”。如果一个架构符合REST原则,就称它为RESTful架构。
3.6.2 RESTful风格接口
对用户进行操作的接口,包括增删改查。
3.6.2 RESTful架构特点
- 每一个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现;
- 表现层:数据的不同表现形式(如:图片、文字表现同一个数据对象)
- 客户端通过四个http动词(get、post、put、delete),对服务器端资源进行操作,实现“表现层状态转化”;
- 接口之间传递的数据最常用格式为JSON。
四、接口测试流程
- 需求分析:主要依据需求文档
- 接口文档解析:一般是由开发人员编写接口文档(API文档)
- 设计测试用例
- 执行测试:使用接口测试工具(postman、jmeter)实现;通过编写代码(python+Requests+UnitTest)实现。
- 接口缺陷管理与跟踪
- 生成测试报告
- 接口自动化持续集成(可选)
五、接口文档
5.1 接口文档介绍
接口文档:又称为API文档,一般是由开发人员所编写的,用来描述系统所提供接口信息的文档。大家都根据这个接口文档进行开发,并需要一直维护和遵守。
5.2 为什么要写接口文档
- 能够让前端开发与后台人员更好的配合,提高工作效率。(有一个统一参考的文件)。
- 项目迭代或者项目人员更迭时,方便后期人员查看和维护。
- 方便测试人员进行接口测试。
5.3 展现形式
word文档形式、Excel表格式形式、PDF文档形式。
5.4 结构(重点)
- 基本信息:
- 资源路径(协议和域名在“系统信息”中)
- 请求方法
- 接口描述
- 请求参数:
- 请求头:
- Content-Type:描述 请求体的数据类型
- 请求体:
- 实现该接口使用的 数据及对应类型
- 请求头:
- 返回数据:
- 成功:状态码 200
- 失败:错误码(自定义状态码)
- 码值
- 描述信息
六、接口文档解析(重点)
接口文档解析的本质:从接口文档中,找出http请求所需要的的 数据信息,对应响应结果的 预期结果。
- 主要包含:请求方法、URL、请求头、请求体、响应状态码、描述。
以登录为例:
- 请求方法:post
- URL:http://ihrm-test.itheima.net/api/sys/login
- 请求头:Content-Type:application/json
- 请求体:{“mobile”:“13800000002”,“password”:“123456”}
- 响应状态码:200
- 错误码:
- 10000:操作成功!
- 20001:用户名或密码错误
- 99999:抱歉,系统繁忙,请稍后重试!
- 错误码: