【学完接口测试应该具备的能力】
- 能对业务接口和单接口进行用例设计
- 能使用Postman对接口进行调试
- 能使用Python代码进行接口自动化测试
- 能基于数据分离思想优化自动化代码
- 能通过Allure生成自动化测试报告
【接口测试流程】
接口文档解析 --> 设计测试用例 --> 脚本开发 --> 执行脚本 --> 缺陷跟踪 --> 测试报告
前置知识
1、URL
- URL:是互联网上标准资源的地址,一般称为统一资源定位符
- 组成:协议 :// hostname[:port] / path / [?查询参数1 & 查询参数2]
- 协议:数据传输的格式,如http、https等
- 服务器地址hostname:域名或IP
- 端口post:一个应用程序对外访问的唯一标识,常用:80(http)、443(https)【协议默认端口可以省略】
- 资源路径path:主机资源的具体地址。包括目录和文件名等,用"/"隔开
- 参数:客户端向服务器传递的数据;参数和路径之间用"?"隔开;多个参数用"&"隔开
2、HTTP
- HTTP:超文本传输协议,基于请求与响应的应用层协议
- 作用:规定了客户端与服务器之间信息传递规范,是二者共同遵守的协议
- 组成
- HTTP请求:定义请求数据格式
- 请求行、请求头、请求体
- HTTP响应:定义响应数据格式
- 状态行、响应头、响应体
- HTTP请求:定义请求数据格式
1)请求行
- 位置:请求数据第一行
- 作用:说明请求方法、访问的资源、协议版本
- 常用请求方法
- GET:从服务器获取资源
- POST:在服务器新建一个资源
- PUT:在服务器更新资源
- DELETE:从服务器删除资源
2)请求头
- 位置:请求数据第二行到空白行之间
- 作用:通知服务器客户端请求信息
- 特点:请求头部由键值对组成,每行一对
- Content-Type:请求体数据类型
- text/html:HTML格式
- image/jpeg:jpg图片格式
- application/json:JSON数据格式
- application/x-www-form-urlencoded:表单默认的提交数据格式
- multipart/form-data:在表单中进行文件上传时使用
3)请求体
- 位置:空白行之后的内容
- 作用:传输数据实体
- 注意:请求体常在POST、PUT方法中使用
- 常配合的请求头:Content-Type和Content-Length
4)状态行
- 位置:响应数据第一行
- 作用:描述服务器处理结果
- 内容:状态行由协议版本号、状态码、状态消息组成
- 状态码:三位数字组成,第一个数字定义响应类别
- 1XX:指示信息
- 2XX:成功
- 3XX:重定向
- 4XX:客户端错误
- 5XX:服务端错误
5)响应头
- 位置:第二行开始到空白行之间
- 作用:描述客户端要使用的一些附加信息
- 特点:响应头由键值对组成,每行一对
6)响应体
- 位置:响应数据空白行之后
- 作用:服务器返回的数据实体
- 特点:有图片、json、xml、html等多种类型
3、接口
【接口规范】
- 作用:让前端开发与后台接口开发人员更好的配合,提供工作效率
- 常用接口规范
- 传统接口风格
- 对用户进行操作的相关接口,包括增删改查
- 特点
- 主要使用post、get方法
- URL定位资源和操作混合
- 状态码均为200
- RESTful接口风格
- 一种网络应用程序的设计风格和开发方式,提供了一组设计原则和约束条件
- 特点
- 请求API的URL仅仅用来定位资源,不包含对资源的操作
- 通过标准HTTP方法对资源进行增删改查操作
- 利用HTTP状态码返回状态信息
- 传统接口风格
接口测试用例
如何设计业务流程测试用例?
- 根据流程图、找出业务路径
- 根据业务路径分析对应的接口
- 将业务路径转化为接口测试用例
1)找业务路径
2)解析接口文档
- 为什么要进行接口文档解析?
- 熟悉接口信息,为设计接口用例准备
- 接口API文档:
- 一般由后端开发编写
- 用来描述接口信息的文档
- 如何进行接口文档解析?
- 分析接口之间的依赖关系
- 分析接口请求(如:URL、请求方法、请求头、请求参数类型、请求参数等)
- 分析接口响应(如:响应状态码、响应数据等)
3)编写接口测试用例
ID | 模块 | 优先级 | 用例名称 | 接口名称 | 前置条件 | 请求URL | 请求方法 | 请求头 | 请求参数类型 | 请求参数 | 预期结果 |
生成验证码 | / | /api/captchImage | get | / | / | / | 响应状态码:200 响应数据:'{"msg":"操作成功", "img":"......","code": 200, "uuid":"xxxxxx"}' | ||||
登录 | / | /api/login | post | {"Content-Type":"application/json"} | json | { "username":"manager", "password":"123456“, "code":"2", "uuid":"xxxxxx" } | 响应状态码:200 响应数据:'{"msg":"操作成功", "code": 200, "token":"xxxxxx"}' | ||||
新增课程 | 1、登录成功 | /api/clues/course | post | {"Content-Type":"application/json","Authorization":"xxxxxx"} | json | { "subject":"6", "price":899, "applicationPerson":"2", "info":"测试开发提升课01" | 响应状态码:200 响应数据:'{"msg":"操作成功", "code": 200}' | ||||
课程列表查询 | 1、登录成功 | /api/clues/course/list | get | {"Authorization":"xxxxxx"} | / | / | 响应状态码:200 响应数据:返回对应的json数据 | ||||
合同上传 | 1、登录成功 | /api/common/upload | post | {"Content-Type":"multipart/form-data","Authorization":"xxxxxx"} | multipart/form-data | / | 响应状态码:200 响应数据:返回对应的json数据 | ||||
新增合同 | 1、登录成功 | /api/contract | post | {"Content-Type":"application/json","Authorization":"xxxxxx"} | json | { "name":"测试888", "phone":"13612341888", "contractNo":"HT10012004", "subject": "6", "courseld": 99, "channel": "0", "activityld": 77, "fileName": } | 响应状态码:200 响应数据:'{"msg":"操作成功","code":200}' | ||||
合同列表查询 | 1、登录成功 | /api/contract/list | post | {"Authorization":"xxxxxx"} | / | / | 响应状态码:200 响应数据:返回对应的json数据 | ||||