接口测试
概念
跨过前端,直接测试后端实现是否符合接口规范,主要是校验数据的交互、传递和控制管理过程, 以及相互逻辑依赖关系
作用
1.更精准的定位 BUG
2. 发现程序中的安全隐患
3. 提高测试效率(项目越复杂越明显)
接口测试的特点
- 测试可以提前介入, 提早发现Bug, 符合质量控制前移的理念
- 可以发现一些页面操作发现不了的问题
- 接口测试低成本高效益(底层的一个Bug能够引发上层8个左右Bug, 接口测试可以实现自动化)
- 不同于传统的单元测试, 接口测试是从用户的角度对系统进行全面的检测
接口测试的三要素:
1. 定位接口资源
2. 提交测试数据
3. 查看响应结果
分类
接口测试大致可以分为两大类:
1. web接口测试(BS架构项目)
- 服务器接口测试(测试浏览器与服务器的接口)
- 外部(第三方)接口测试(测试第三方实现的接口:天气预报、支付...)
2. 模块接口测试(CS架构项目)
RESTful 架构风格
定义
RESTful 一种软件架构风格、设计风格, 而不是标准, 只是提供了一组设计原则和约束条件。
REST: 即(Representational State Transfer)的缩写。 词组的翻译是"表现层状态转化"。 如果一个架构符合REST原则, 就称它为RESTful架构
作用
可以保证 API 文档的编写风格, 提高文档的易读性
RESTful接口风格
对用户进行操作的相关接口, 包括增删改查
- http://服务器地址:端口号/实体(资源)集合/单个实体(资源)
- http://服务器地址:端口号/项目名称/版本/资源集合/单个资源
- 协议://域名: 端口号/资源路径/{资源集合}/{指定资源}
操作 | 请求方式 | URL | 成功状态码 | 预期结果 |
查询某个用户 | GET | http://127.0.0.1:8080/myweb/users/1 | 200 | 返回单个资源对象 |
查询所有用户 | GET | http://127.0.0.1:8080/myweb/users | 200 | 返回资源对象的列表 |
添加用户 | POST | http://127.0.0.1:8080/myweb/users | 201 | 返回新生成的资源对象 |
修改用户 | PUT | http://127.0.0.1:8080/myweb/users/1 | 201 | 返回完整的资源对象 |
删除用户 | DELETE | http://127.0.0.1:8080/myweb/users/1 | 204 | 返回为空 |
RESTful架构特点
- 1. 每一个URL代表一种资源;
- 2. 客户端和服务器之间, 传递这种资源的某种表现层;
- 3. 客户端通过四个HTTP动词, 对服务器端资源进行操作, 实现"表现层状态转化";
- 4. 接口之间传递的数据最常用格式为JSON
三要素
要素1: 定位接口资源
1、URL(统一资源定位符)
http://127.0.0.1:8000/api/uid/users/1
组成: 协议://域名: 端口号/资源路径/{资源集合}/{指定资源}
2、请求方式(数据的提交方式)
常见实现有: GET 、 POST、 PUT、 DELETE 分别对应 查、 增、 改、 删 四种操作
PS: GET 和 POST 二者比较有什么区别?
1、 提交方式不同(GET提交的数据显示在地址栏, 而 POST 隐式的提交数据, 后者更安全)
2、 可提交的数据量不同(GET提交的数据量有限制, 而 POST 无限制)
3、 执行效率不同(GET 的执行效率比 POST 稍高)
要素2: 提交参数
提交格式1: 键值对格式
提交格式2: JSON(类似于 Python 的字典) 格式
例:
格式1提交: username=user&password=123456&aihao=paobu&aihao=tingyinyue&aihao=dushu
格式2提交:
{ "username":"user",
"password":"123456",
"aihao":["paobu","tingyinyue","dushu"]
}
要素3: 响应结果
状态码(response code | status code)
1xx: 请求正常, 但是无响应, 只在实验状态下使用
2xx: 请求正常, 响应正常, 比如: 200 201 204 ...
3xx: 以其他方式获取响应, 比如: 302 重定向 304 取本地缓存
4xx: 浏览器端异常, 比如: 404 资源路径有误
5xx: 服务器端异常, 比如: 500 服务器运行异常
响应体
- 响应html文档, 比如:访问百度首页
- 响应JSON数据, 比如:学生管理系统响应的数据
注:JSON是一种轻量级的数据交换格式;JSON是以键/值对组合方式,键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值: 1 {"name": "张三","age":18}
接口测试流程
1.需求分析
主要依据需求文档
2. 接口文档解析
一般是由开发人员编写接口文档(API文档)
3. 设计测试用例
4. 执行测试
使用接口测试工具实现
通过编写代码实现
5. 接口缺陷管理与跟踪
6. 生成测试报告
7. 接口自动化持续集成(可选)
API文档
定义
接口文档是一个描述接口信息(请求:请求方式、path、请求参数等,响应:状态码、响应数据等)的文档
作用
- 便于前端开发和后端开发更好的协作
- 便于项目更迭货项目人员迭代时,能更好的上手与维护
- 便于测试今早的介入
文档内容
编写:开发
内容:基本信息、请求参数、响应数据基本信息:
接口名称、请求方法、请求路径、接口描述请求参数:
请求头(headers)
请求体(body)
前提:post和put是有请求体
内容:参数名称、参数类型、是否必填、示例、备注等响应内容:
状态码
响应数据:参数名称、参数类型、是否必填、示例、备注等
API文档示例:
用户认证(登录注册)
基本信息:
path:/app/v1_0/authorizations
Method:POST
接口描述:
线上地址:http://ttapi.research.itcast.cn/app/v1_0/authorizations
返回状态码:
201 ok
400 请求参数错误(包括:参数缺失、手机号格式不正确、验证码时效等)
507 服务器数据库异常
token说明
token用于访问需要身份认证的普通接口,有效期2小时
请求参数:
Headers
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
mobile | string | 是 | 手机号 | ||
code | string | 是 | 短信验证码 |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
message | string | 是 | 提示信息 | ||
data | object | 否 | 数据 | ||
L token | string | 是 | 用户token令牌 |